AppiumDriver的各种findElement方法的尝试,尝试的目标应用是SDK自带的Notepad应用。
1. findElementByName
1.1 演示样例
el = driver.findElementByName("Add note"); assertThat(el.getText(),equalTo("Add note"));
1.2 怎样获得Name
安卓设备没有找到适合的方法,尝试用Appium Inspector,可是使用了当前最新的“AppiumForWindows-1.2.3.1”没有看到这个属性,且Inspector在Windows以下非常的不稳定,非常easycrash。真心期望Appium团队尽快解决问题
iOS设备倒能够用Appium Inspector获得(下面图片来自网上)
1.3 建议
个人建议能够尝试先用view显示的文本作为name看能否拿到该控件,依照我个人的经验一般都是会成功的。所以我非常怀疑安卓上面控件的name是否就等于text。
假设确实还是不行的话就仅仅好放弃用name了。
或者等待Appium后来的稳定的inspector公布后看能否够获得控件的name。
这种方法在Appium1.0之后事实上已经过时而要被findElementByAccessibilityId代替得了。不知道为什么还能调用,猜想是Appium团队想保留一定的兼容性以平滑过度吧。请查看:https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/migrating-to-1-0.md
2. findElementByAndroidUIAutomator
2.1 演示样例
el = driver.findElementByAndroidUIAutomator("new UiSelector().text("Add note")"); assertThat(el.getText(),equalTo("Add note"));
2.2 怎样获得UIAutomator參数
UIAutomator获取控件的方式多种多样,都是通过UiSelector对象来去查找,比方使用view的text文本去当前窗体查找控件,这里不做累述,往后会另起一篇文章来描写叙述UIAUtomator获取控件的方式,到时直接套用进来就能够了。
3. findElementByClassName
3.1 演示样例
el = driver.findElementByClassName("android.widget.TextView"); assertThat(el.getText(),equalTo("Add note"));
3.2 怎样获得控件的ClassName
能够使用UIAutomatorViewer工具直接查看
3.3 建议
使用ClassName一般获得的view都不止一个,所以应该须要遍历一遍得到的views,然后缩写搜索条件来获得目标控件。演示样例中由于仅仅有一个textview控件在窗体上面,所以不须要遍历。
4. findElementById
4.1 演示样例
el = driver.findElementById("android:id/title"); assertThat(el.getText(),equalTo("Add note"));
4.2 怎样获得Resource Id
能够通过UIAutomatorViewer获得
4.3 建议
假设目标设备的API Level低于18则UIAutomatorViewer不能获得相应的Resource ID,仅仅有等于大于18的时候才干使用。5. findElementByAccessibilityId
5.1 演示样例
el = driver.findElementByAccessibilityId("menu_add_note_description"); assertThat(el.getText(),equalTo("node"));
5.2 怎样获得AccessibilityId
5.3 凝视
TextView控件TalkBack能够直接读出里面的内容,可是ImageView TalkBack就仅仅能去读contentDescription的值,告诉用户这个图片究竟是什么。
6. findElementByCssSelector
7. findElementByLinkText
8. findElementByPartialLinkText
9.findElementByTagName
10.findEelementByXPath
10.1 演示样例
el = driver.findElementByXPath("//android.widget.TextView[contains(@text,'Add note')]"); //el = driver.findElement(By.xpath("//android.widget.TextView")); assertThat(el.getText(),equalTo("Add note"));
10.2 XPath格式变化
从老版本号的Appium0.18.x升级到如今的Appium1.x后,注意class name和xpath策略的变化:你如今须要使用FQCN来描写叙述你的控件。也就是说原来的:
findElementByXpath(""//TextView[contains(@text,'Add note')]"")
须要改成
findElementByXpath("//android.widget.TextView[contains(@text,'Add note')]")
具体变动请查看《Appium0.18.x迁移到Appium1.x须知事项》
sometimes uiautomator fails to create the dump.xml. A client side retry may help. I don't think there's much we can do about the problem until Google fixes uiautomator.