您如何使用 wd 和 javascript select 一个作为 Appium 中另一个元素的子元素的元素?

How do you select an element that is the child of another element in Appium using wd and javascript?

我在 Android 上有一个 React-Native 应用程序,屏幕上有多个选择器(下拉菜单)。我有一个 accessibilityLabel 分配给名为 "Pick Description" 的第一个选择器组件,我有一个 accessibilityLabel 分配给名为 "Pick Price" 的第二个选择器组件。我可以使用 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();,它会从第一个选择器中获取文本,即 "Pick Description"。看起来它只是返回页面上 ID 为 "text1" 的第一个元素。

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

您可以考虑转向 XPath selector 并将您的代码修改为:

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

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

参考文献:

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

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

参考文献: