如何使用wd和javascript选择Appium中另一个元素的子元素?

时间:2019-05-28 20:19:54

标签: javascript android appium

我在Android上有一个React-Native应用程序,屏幕上有多个Pickers(下拉列表)。我将一个accessibilityLabel分配给第一个选择器组件,称为“选择说明”,并将我一个accessibilityLabel分配给第二个选择器组件,称为“选择价格”。我可以使用driver.waitForElementByAccessibilityId( "Pick Price" )在页面上找到第二个选择器组件,但是我需要能够找出选择器中的文本值,即已选择的值。我正在使用Jest,JavaScript和wd。

我已经使用Appium Desktop打开了该应用程序,并选择了选择器,我看到它具有一个子组件,该子组件是android.widget.TextView,其资源ID为“ android:id / text1”。

如果我使用driver.waitForElementByAccessibilityId( "Pick Price" ).waitForElementById( "android:id/text1" ).text();,它将从第一个选择器中获取文本,即“选择说明”。看起来它只是返回页面上ID为“ text1”的第一个元素。

当我为Picker组件分配了accessibilityLabel但没有为TextView分配accessibilityLabel时,如何从React-Native Picker组件获取文本值?

2 个答案:

答案 0 :(得分:0)

您可以考虑移至XPath selector,然后将代码修改为:

driver.waitForElementByAccessibilityId( "Pick Price" ).waitForElementByXPath( ".//[@android:id/text1]" ).text();

这样,第二个Web元素搜索范围将相对于第一个元素。

参考文献:

答案 1 :(得分:0)

我发现了如何做到这一点。能够在元素内进行搜索的唯一搜索方法是elementBy...elementsBy...方法。为了使这些方法可以对链中返回的前一个元素进行操作,您需要添加'>'作为方法中的第一个参数。这告诉该方法对元素起作用而不是全局作用。因此,对于上面的示例,您将使用

driver.waitForElementByAccessibilityId("Pick Price").elementById(">", "android:id/text1").text();

参考文献: