我想获取一个元素下的所有子元素个数,如像 uiautomator 中的.getChildCount();这样的方法。我用 driver.findElement(By.name("layouttemplate_LinearLayout")).findElements(By.className("android.widget.LinearLayout")).size(); 这样获取到的个数是在当前屏幕上的子元素个数。 请问有没有方法获取包括隐藏的所有子元素。
同求,我发现 driver.findElementsByXpath() 这个方法有时候找不到元素,很不稳定,有大神能解释下吗?
#1 楼 @gkqqqq 你可以在查找之前调用一下 pagesource 方法,有时候找不到是因为没有 dump 新刷出来的页面。
Appium 获取到的元素都是屏幕上显示出来的元素,listview 中未显示的元素都是查询不到的(这可能就是你说的隐藏元素)。有时候 findElement 找不到元素并不是元素不存在,而是该元素重叠导致无法无法 find,可以通过 findElements 获取后来筛选。还有就是自定义的控件由于 id 默认,可能无法正常获取。总之元素是由树状图排列,能正常显示的都是可以通过父节点或者根节点往下遍历获取。
#2 楼 @weamylady 好像可以了,谢谢大神指教!
#2 楼 @weamylady 大神, 有还有一个总是请教一下,我有一个弹出的浮层,在模拟器上用 APPIUM 能够找到,但是放到真机上去就找不到这个浮层了,用 inspector 打开,根本就找不到那个布局,是什么原因啊?
#5 楼 @gkqqqq 还是一样,你 dump 下源码,看看有没有就知道了
没有使用过 By.name,用过 By.Id 这种方式查找子元素,只能定位到一个。然后试了 xpath,如果直接 By.xpath,只能获取到它下一层的子节点元素,无法获取到孙节点。用这种方式可以获取其下方所有的子元素 mainXpath+"//node()"。我是获取的指定属性的元素:mainXpath+ "//node()[contains(@class,'TextView')]"
desired_capabilities['appPackage'] = 'com.android.calculator2' desired_capabilities['appActivity'] = '.Calculator' 请问这两句什么意思