无论我如何尝试,我都无法让我的 React Native (Android) 应用程序使用 Appium 向下滚动。
我正在使用 UiAutomator2 和 WebdriverIO。
我的代码如下所示:
scrollUntilDisplayed(element: WebdriverIO.Element) {
const dimensions = driver.getWindowSize();
touchScroll(10, 100);
}
Run Code Online (Sandbox Code Playgroud)
touchScroll我尝试了以下调用来代替:
driver.touchScroll(offsetX, offsetY)- 抛出错误 ( invalid argument: java.lang.IllegalArgumentException: ScrollToModel: The mandatory field 'params' is not present in JSON)driver.touchScroll(offsetX, offsetY, element)- 抛出错误 ( invalid argument: java.lang.IllegalArgumentException: ScrollToModel: The mandatory field 'params' is not present in JSON)browser.execute("mobile: scroll", {direction: 'down'});- 抛出错误 ( unknown error: An unknown server-side error occurred while processing the …javascript appium webdriver-io android-uiautomator react-native
我最近开始学习uiautomator各种Android设备的UI测试.目前我正在测试Galaxy S4.
我正在寻找可用于自动解锁用户绘制解锁手机的解锁模式的任何类或方法.例如,我将信N作为"绘图模式"来解锁手机.如何自动解锁此模式uiautomator?
现在我正在使用uiautomator像这样转储UI:
adb shell uiautomator dump
Run Code Online (Sandbox Code Playgroud)
它工作正常,但执行它需要大约3秒钟.所以我想知道是否有更快的方法呢?就像创建一个转储UI的服务一样,还是需要一段时间?
我正在尝试验证ListView中每个列表项中的文本并逐个向下滚动,以便我可以验证每个...但由于某种原因,我无法让它继续滚动列表验证每个元素.有没有人有任何运气自动化这种行动.这是我最接近的.如果这还不够,请告诉我:
UiScrollable scrollableList = new UiScrollable(new UiSelector()
.resourceId("com.example.app:id/listView")
.className(android.widget.ListView.class.getName())
.index(3));
for ( i = 0; i < 100; i++ ) {
UiObject listItem = scrollableList.getChildByText(new UiSelector()
.className("android.widget.RelativeLayout")
.instance(i), "Text Title");
UiObject textBody = listItem.getFromParent(new UiSelector()
.resourceId("com.example.app:id/textBody"));
System.out.println("Validating: " + textBody.getText());
Run Code Online (Sandbox Code Playgroud)
当时屏幕上只能看到5个listItem,因此当它尝试到达6时它会失败,因为它不能:
一个. 它不会尝试向前滚动以获得列表中的下一个
b. 即使它确实向前滚动以获得列表中的下一个,实例值将减少到5,而不是增加到6.
我在没有.instance()方法的情况下尝试过它,但在这种情况下,它只是反复遍历列表中的第一个项目而不进行到项目2,3,4等.
如果有人遇到过这个问题,我会很乐意反馈.
是否可以在api <18上使用UIautomator?自动测试的主要目的是回归测试,并且还应测试具有android 4.1,4.2的设备.也许可以使用低于2.0的UIautomator库版本,但我无法找到有关以前版本的任何信息.
我想使用 uiautomatorEditorInfo.IME_ACTION_DONE发送EditText:
要测试的代码:
mEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
//Do something
}
}
Run Code Online (Sandbox Code Playgroud)
这应该通过发送数字键盘键码进行测试 - 但这与正常的键码不同,如下所示:
mDevice.pressKeyCode(KEYCODE_ENTER);
Run Code Online (Sandbox Code Playgroud)
所有要确认的关键事件在这里不起作用。如何实现发送数字键盘确认按键事件的位置EditorInfo.IME_ACTION_DONE?
我已经安装了Android studio V 3.1.1
我正在尝试从以下位置启动 UIautoamtorviewer.bat 文件
C:\Users\panmishr\AppData\Local\Android\Sdk\tools\bin
Run Code Online (Sandbox Code Playgroud)
但它总是给我错误
SWT folder '..\framework\location of your Java installation.' does not exist.Please set ANDROID_SWT to point to the folder containing swt.jar for your platform.
Run Code Online (Sandbox Code Playgroud)
下面是我设置的环境变量列表
ANDROID_HOME: C:\Users\panmishr\AppData\Local\Android\Sdk
ANDROID_SWT:C:\Users\panmishr\AppData\Local\Android\Sdk\tools\lib\x86_64
JAVA_HOME :C:\Program Files\Java\jdk1.8.0_171
Run Code Online (Sandbox Code Playgroud)
在路径变量中,我已经包含
C:\Users\panmishr\App;C:\Users\panmishr\AppData\Local\Android\Sdk\tools
C:\Users\panmishr\AppData\Local\Android\Sdk\platform-tools
Run Code Online (Sandbox Code Playgroud)
我的机器是 64 位 Windows 7 。
让我知道,我错过了什么。
./adb exec-out uiautomator dump /dev/ttyKilled重复返回输出。顺便说一句,有时它确实会返回 xml 文件。对它有什么补救措施?
我在junitTest中使用uiautomator,在“@BeforeClass”我初始化一个UiDevice:“”mUIDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); 首先我完成了一个测试,然后我再次开始测试,我得到一个错误:java.lang.IllegalStateException:UiAutomationService android.accessibilityservice.IAccessibilityServiceClient$Stub$Proxy@7478d40alreadyregistered!
@RunWith(AndroidJUnit4.class)
public class DailyInstrumentedTest {
@BeforeClass
public static void beforeTest(){
try {
mUIDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); //??device??
}
}
@Test
public void test(){}
}
Run Code Online (Sandbox Code Playgroud) android accessibility android-uiautomator android-accessibility
我正在使用 Jetpack Compose 和 Appium 以及 UIAutomator。我想为id可组合项设置唯一的值,而不是显示 Xpath,因为:
不建议使用 XPath 定位器,这可能会导致脆弱的测试。请您的开发团队提供独特的辅助功能定位器。
在我的 Composable 下的 Android Studio 中,我添加了:
Row(
modifier = Modifier.semantics { testTagsAsResourceId = true }
...
) {
Text(
modifier = Modifier.semantics { testTag = "testTag" },
Run Code Online (Sandbox Code Playgroud)
现在在 Appium 中我可以看到resource-id= testTag,但id仍然显示 Xpath。
根据这篇文章,我应该能够将其设置为与使用和某些类id相同 ,但我不明白如何 - 我应该在我的可组合项中添加此注释吗?resource-id@AndroidFindByUiSelector
我在这里读到了一个解决方案,但不幸的是,浓缩咖啡不适合我。
我也尝试使用:
modifier = Modifier.semantics { this.contentDescription = "testTag" },
Run Code Online (Sandbox Code Playgroud)
这实际上改变了 Xpath,但仍然显示上面的警告。
这就是我想要的方式(其中 id 和资源 id 具有相同的值):文章中的图片
xpath kotlin android-studio android-uiautomator appium-android
android ×8
adb ×1
android-ui ×1
appium ×1
automation ×1
javascript ×1
kotlin ×1
react-native ×1
webdriver-io ×1
xpath ×1