1. AppiumDriver<MobileElement>和 androidDriver 之间的区别
启动appium,执行testng测试脚本,脚本启动配置项如下:
import io.appium.java_client.AppiumDriver;import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, "");//这句不是必须的
capabilities.setCapability("deviceName","Android Emulator");
capabilities.setCapability("platformVersion", "4.4");
capabilities.setCapability("platformName","Android");
capabilities.setCapability("appPackage", "com.android.calculator2");
capabilities.setCapability("appActivity", ".Calculator");
AppiumDriver driver = new AppiumDriver(new URL(""), cap
2. android用dom解析HTML,关于Element title = (Element)entry.getElementsByTagName("title").item(0);
item() 方法可返回节点列表中处于指定索引号的节点。
我是android了解不多,我是学java的,只能帮你这么多
3. android stuio 中</>和<></>的区别
这是XML语法的规定,一对标签必须以<element>abc</element>作为起始和结束,中间的abc是标签的内容。如果标签的内容很短,不含嵌套标签,可以直接使用自封闭标签<element abc/>,效果和上面的<element>abc</element>是一样的。
4. 为什么android找不到javax.lang.model.element.element
很明显导入类的时候写错了本来应该是一个org.jsoup.select.Elements但是import的却是javax.lang.model.util.Elements检查下看看那个类引用了Elements把javax.lang.model.util.Elements换成org.jsoup.select.Elements
5. android中如何在xml中添加新的item
Eclipse中打开对应的xml,里面有图形界面很容易插入想添加的item
而且不需要考虑item的在xml的位置以及element name
6. android调用webservice,服务端方法接收一个org.w3c.dom.Element对象。怎么传送这样一个对像过去
webservice方法里面传入这个对象;
通过拦截器传送;
7. 我写Android时一个项目里写了3个mole,编译后为什么会生成3个app
组件化的目的是为了业务解耦,每个业务模块需要不同的功能,例如车辆详情模块需要第三方分享,城市定位模块需要网络地位等。有些特殊功能的初始化需要在 Application 中去做,但是这些功能并非全部业务组件都用到的东西,放到 BaseApplication 不合适。
因此,我想这样操作:
模块共有的初始化,放入BaseApplication 中。
模块自身的特殊功能初始化,放在自己的 Application。
设想是美好的,但实现前需要先思考一个问题:
多 Mole 项目开发的时候,app mole 和 library mole 的 都有不同的自定义 Application ,可以共存并且自动合并吗?
答案是 No。
为什么不可以?
首先,自定义 Application 需要声明在 AndroidManifest.xml 中。其次,每个 Mole 都有该清单文件,但是最终的 APK 文件只能包含一个。因此,在构建应用时,Gradle 构建会将所有清单文件合并到一个封装到 APK 的清单文件中。
合并的优先级是:
App Mole > Library Mole
合并的规则:
结合我们的情况,是值 A 合并值 B,会产生冲突错误,如下是我的亲身试法:
Execution failed for task ':app:processDebugManifest' .
> Manifest merger failed : Attribute application @name value = ( com . baseres . BaseApplication ) from AndroidManifest . xml: 8 : 9 - 51
is also present at [ :carcomponent ] AndroidManifest . xml: 14 : 9 - 55 value = ( com . carcomponent . CarApplication ) .
Suggestion: add 'tools:replace="android:name"' to < application > element at AndroidManifest . xml: 7 : 5 - 24 : 19 to override .
错误信息中给出了解决建议,在高优先级的 App Mole 中使用 tools:replace="android:name",但这样做是直接用值 A 替换了值 B,并非我们想要的结果。
8. java10匹配什么版本appium
一个脚本需要讲清楚测试环境:1、自动化平台方面,测试的平台是什么(appium或者selendroid,selendroid用于测试低版本的Android系统的app);2、被测试设备方面,被测试设备的平台(Android或者iOS),被测试设备的名字,被测试设备的系统版本;3、被测试应用方面,待测应用是移动web应用(使用移动端浏览器)还是原生/混合应用,若不是web应用,那么是否需要安装包进行安装,该应用的package和activity是什么。
appium是对selenium的扩展,又细分为Android方向的扩展和iOS方向的扩展。例如,WebElement可以操作selenium中的命令;MobileElement是appium中的元素,是WebElement的子类,添加了一些移动端独有的手势操作;AndroidElement和iOSElement都是MobileElement的子类,各自添加了一些系统特有的功能。又比如,RemoteWebDriver是selenium中的,AppiumDriver是其子类,添加了一些移动端的功能;AndroidDriver和iOSDriver是AppiumDriver的子类,分别适用于特定的系统。
9. Android 中有哪几种解析 xml 的类,官方推荐哪种
在Android中提供了三种解析XML的方式:SAX(Simple API XML),DOM(Document Objrect Model),以及Android推荐的Pull解析方式.下面就对三种解析方式一一详细阐述。
首先介绍SAX解析,SAX是事件驱动型XML解析的一个标准接口不会改变 SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束
下面介绍DOM解析,DOM,即对象文档模型,它是将整个XML文档载入内存(所以效率较低,不推荐使用),每一个节点当做一个对象
下面介绍Pull解析,是Android推荐使用,更适合移动设备,以下代码讲解
public class PulPersonService {
public List<Person> getPersons(InputStream instream) throws Exception {
List<Person> persons = null;
Person person = null;
XmlPullParser parser = Xml.newPullParser();//得到Pull解析器
parser.setInput(instream, "UTF-8");//设置下输入流的编码
int eventType = parser.getEventType();//得到第一个事件类型
while (eventType != XmlPullParser.END_DOCUMENT) {//如果事件类型不是文档结束的话则不断处理事件
switch (eventType) {
case (XmlPullParser.START_DOCUMENT)://如果是文档开始事件
persons = new ArrayList<Person>();创建一个person集合
break;
case (XmlPullParser.START_TAG)://如果遇到标签开始
String tagName = parser.getName();// 获得解析器当前元素的名称
if ("person".equals(tagName)) {//如果当前标签名称是<person>
person = new Person();//创建一个person
person.setId(new Integer(parser.getAttributeValue(0)));//将元素的属性值赋值给id
}
if (person != null) {//如果person已经创建完成
if ("name".equals(tagName))//如果当前节点标记是name
person.setName(new String(parser.nextText()));
else if ("age".equals(tagName))//如果当前元素节点标记是age
person.setAge(new Short(parser.nextText()));
}
break;
case (XmlPullParser.END_TAG)://如果遇到标签结束
if ("person".equals(parser.getName())) {//如果是person标签结束
persons.add(person);//将创建完成的person加入集合
person = null;//并且置空
}
break;
}
eventType=parser.next();//进入下一个事件处理
}
return persons;
}