Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Appium无法使用UiSelector在屏幕外定位元素_Appium_Appium Android - Fatal编程技术网

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

Appium无法使用UiSelector在屏幕外定位元素,appium,appium-android,Appium,Appium Android,我开始为一个用NativeScript编码的移动应用程序(它曾经是一个混合Cordova应用程序)自动化一个测试套件,事实证明很难找到一些元素 我正在尝试使用UiSelector查找位于可见屏幕空间(也称为视口)之外的TextView小部件: @AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"CFT\")") private MobileElement labelCFT; 当我尝试与这样的元素交互时,结果是以下消息: o

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

我正在尝试使用UiSelector查找位于可见屏幕空间(也称为视口)之外的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()的工作原理吗? 这是另一种解决方案吗


非常感谢。

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

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无法与屏幕不可见的元素交互。我找到的唯一方法是将屏幕向上滚动到您想要交互的元素。如果滚动时找不到元素,它将抛出错误。