AppiumDriver的各种findElement方法的尝试,尝试的目标应用是SDK自带的Notepad应用。
1
2
|
el = driver.findElementByName(
"Add note"
);
assertThat(el.getText(),equalTo(
"Add note"
));
|
安卓设备没有找到适合的方法,尝试用Appium Inspector,但是使用了当前最新的“AppiumForWindows-1.2.3.1”没有看到这个属性,且Inspector在Windows下面非常的不稳定,很容易crash。真心期望Appium团队尽快解决这个问题
iOS设备倒可以用Appium Inspector获得(以下图片来自网上)
个人建议可以尝试先用view显示的文本作为name看是否能拿到该控件,按照我个人的经验一般都是会成功的,所以我很怀疑安卓上面控件的name是否就等于text。如果确实还是不行的话就只好放弃用name了。或者等待Appium后来的稳定的inspector发布后看是否可以获得控件的name。<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+1eK49re9t6jU2kFwcGl1bTEuMNauuvPG5Mq10tG+rbn9yrG2+NKqsbtmaW5kRWxlbWVudEJ5QWNjZXNzaWJpbGl0eUlkyKG0+rXDwcujrLK71qq1wM6qyrLDtLu5xNy199PDo6yyws/rysdBcHBpdW3NxbbTz+uxo8H00ru2qLXEvObI3dDU0tTGvbusuf22yLDJoaPH67Lpv7Sjumh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2Jsb2IvbWFzdGVyL2RvY3MvZW4vYWR2YW5jZWQtY29uY2VwdHMvbWlncmF0aW5nLXRvLTEtMC5tZDwvcD4KPGgxPjIuIGZpbmRFbGVtZW50QnlBbmRyb2lkVUlBdXRvbWF0b3I8L2gxPgo8aDI+Mi4xIMq+wP08L2gyPgo8cD48L3A+CjxwcmUgY2xhc3M9"brush:java;"> el = driver.findElementByAndroidUIAutomator("new UiSelector().text(\"Add note\")"); assertThat(el.getText(),equalTo("Add note"));
UIAutomator获取控件的方式多种多样,都是通过UiSelector对象来去查找,比如使用view的text文本去当前窗口查找控件,这里不做累述,往后会另起一篇文章来描述UIAUtomator获取控件的方式,到时直接套用进来就可以了。
1
2
|
el = driver.findElementByClassName(
"android.widget.TextView"
);
assertThat(el.getText(),equalTo(
"Add note"
));
|
可以使用UIAutomatorViewer工具直接查看
使用ClassName一般获得的view都不止一个,所以应该需要遍历一遍得到的views,然后缩写搜索条件来获得目标控件。示例中因为只有一个textview控件在窗口上面,所以不需要遍历。
1
2
|
el = driver.findElementById(
"android:id/title"
);
assertThat(el.getText(),equalTo(
"Add note"
));
|
可以通过UIAutomatorViewer获得
1
2
|
el = driver.findElementByAccessibilityId(
"menu_add_note_description"
);
assertThat(el.getText(),equalTo(
"node"
));
|
1
2
3
|
el = driver.findElementByXPath(
"//android.widget.TextView[contains(@text,'Add note')]"
);
//el = driver.findElement(By.xpath("//android.widget.TextView"));
assertThat(el.getText(),equalTo(
"Add note"
));
|
从老版本的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.
最后介绍AppiumDriver的getPageSource函数,可以把当前页面的元素以XML的方式打印出来,建议大家在找不到view的相应属性的时候就调用该函数来慢慢查找了^_^
转自:http://www.2cto.com/kf/201410/340345.html