Appium无法使用UiSelector在屏幕外定位元素

时间:2018-12-19 21:21:21

标签: appium appium-android

我开始为用NativeScript编码的移动应用程序(以前是混合Cordova应用程序)自动化测试套件,事实证明很难找到一些元素。

我正在尝试使用UiSelector找到可见屏幕空间(AKA视口)之外的TextView小部件:

@AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"CFT\")")
private MobileElement labelCFT;

当我尝试与此类元素进行交互时,结果为以下消息:

org.openqa.selenium.NoSuchElementException: Can't locate an element 
by this strategy: By.chained({By.AndroidUIAutomator: 
new UiSelector().textContains("CFT")})

逻辑结论是该元素不存在或我的定位器策略有问题。但这就是问题,当我更改文本以查找可见空间/视口内部的元素时,定位器可以正常工作。示例:

@AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"loans\")")
private MobileElement labelCFT;

然后:

public void whatText() {
    System.out.println("Text of the label: " + labelCFT.getText());
}

我得到正确的“标签文字:这些是您的贷款”。

显然,这是对UiSelector的限制,至少是Appium处理它的方式。

我想象的唯一选择是滚动整个屏幕,然后触发@AndroidFindBy,然后重复进行直到没有向左滚动为止。

这是否应该是UiSelector和textContains()的工作方式? 这是另一个解决方案吗?

非常感谢。

2 个答案:

答案 0 :(得分:0)

我在自动化领域也遇到过类似的问题。我发现的唯一方法是向上或向下滚动直到该元素在屏幕上可见,然后通过“名称”访问该元素。您可以使用以下命令进行滚动。

driver.findElementByAndroidUIAutomator(“ new UiScrollable(new UiSelector())。scrollIntoView(text(\” 您的元素 \“));”);

在屏幕上显示所需元素后,您可以轻松访问该元素。

谢谢

答案 1 :(得分:0)

在Android App中,如果要对不可见的元素执行任何操作,则只能单击或对屏幕上可见的元素执行任何操作,可以在需要指定x和y的地方使用触摸操作方法我认为这可能对您有帮助

TouchAction ta = new TouchAction(driver);
            ta.press(PointOption.point(207, 582)).moveTo(PointOption.point(8, -360)).release().perform();