Appium无法使用UiSelector在屏幕外定位元素
我开始为一个用NativeScript编码的移动应用程序(它曾经是一个混合Cordova应用程序)自动化一个测试套件,事实证明很难找到一些元素 我正在尝试使用UiSelector查找位于可见屏幕空间(也称为视口)之外的TextView小部件:Appium无法使用UiSelector在屏幕外定位元素,appium,appium-android,Appium,Appium Android,我开始为一个用NativeScript编码的移动应用程序(它曾经是一个混合Cordova应用程序)自动化一个测试套件,事实证明很难找到一些元素 我正在尝试使用UiSelector查找位于可见屏幕空间(也称为视口)之外的TextView小部件: @AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"CFT\")") private MobileElement labelCFT; 当我尝试与这样的元素交互时,结果是以下消息: o
@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()的工作原理吗?
这是另一种解决方案吗
非常感谢。我在自动化方面也遇到过类似的问题。我找到的唯一方法是向上或向下滚动,直到元素在屏幕上可见,然后通过“名称”访问元素。您可以使用以下命令进行滚动 driver.findElementByAndroidUIAutomator(“新的UiScrollable(新的UiSelector()).scrollIntoView(文本(\“您的元素\”);” 在屏幕上显示所需元素后,您可以轻松访问该元素
感谢在Android应用程序中,您只能在屏幕上可见的元素上单击或执行任何操作。如果您想在不可见的元素上执行任何操作,您可以使用触摸操作方法,其中需要指定x和y坐标。我想这可能对您有所帮助
TouchAction ta = new TouchAction(driver);
ta.press(PointOption.point(207, 582)).moveTo(PointOption.point(8, -360)).release().perform();
您可以与屏幕可见的元素交互。Appium无法与屏幕不可见的元素交互。我找到的唯一方法是将屏幕向上滚动到您想要交互的元素。如果滚动时找不到元素,它将抛出错误。