我开始为使用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()的工作原理吗?
这是另一种解决方案吗?
非常感谢.
最佳答案 在Android应用程序中,如果要对元素执行任何不可见的操作,您只能单击或对屏幕上可见的元素执行任何操作,您可以使用触摸操作方法,您需要指定x和y cordinated我认为在我的情况下,这可能对你有所帮助
TouchAction ta = new TouchAction(driver);
ta.press(PointOption.point(207, 582)).moveTo(PointOption.point(8, -360)).release().perform();