我目前正在Android设备上使用Appium测试应用程序(appium版本:1.2.4.1,java-client:2.1.0)。我使用以下代码在textField中发送一些文本:
driver.findElement(By.name("Name")).sendKeys("My Name");
并且它工作正常,实际上在文本框上发送文本需要太长时间(通常为7秒)。我想知道是否有人知道在textField上发送文本的另一种方式,需要更少?
谢谢!
答案 0 :(得分:4)
我通过使用adb发送文本而非appium解决了这个问题!它真的很快!
try {
textElement.click();
new ProcessBuilder(new String[]{"adb", "-s", "YOURDEVICEUUID", "shell", "input", "text", "YOURTEXTASINPUT"})
.redirectErrorStream(true)
.start();
} catch (IOException e) {
e.printStackTrace();
}
你也可以使用它来点击,清除,安装,卸载等等。可能有一些需要睡眠线程的同步问题,但它只有50ms,这比appium需要的时间少于5秒! 您可以使用DDMLIB来进行此adb调用,而不是使用ProcessBuilder!
答案 1 :(得分:3)
尝试:
driver.findElement(By.name("Name")).Click();
driver.Keyboard.SendKeys("My Name");
这应该比你的方法运行得快。
答案 2 :(得分:2)
将X1
替换为更高版本的appium中提供的b
方法:
sendKeys
我的经历要快得多。
答案 3 :(得分:1)
在Appium上经历慢速自动化很常见,因为Appium基于客户端/服务器架构。网络问题会影响测试的性能(除非您在安装了Appium的同一台机器上运行测试)。
我可以告诉你,我也遇到了Appium缓慢测试的问题。顺便说一句,它通常发生在模拟器/仿真器上。
如果您的测试需要在用户体验场景中发送密钥,那么SendKeys
是您唯一的选择。此方法不是简单地在文本框中设置值,它实际上就像用户按下键并将键发送到文本框。
如果这是您所需要的,那么您需要了解网络级别的情况,因为这就是您的问题所在。还要考虑这种方法有时会很慢(这是我的经验)。
如果设置文本框值的步骤不是正在考虑的特定测试的自动化的核心部分,那么您始终可以通过ExecuteScript
实现此目的,这样您可以执行您应用中的Javascript代码。我假设您正在自动化WebView上下文。
int result = driver.executeScript("
try {
var el = document.getElementById('<your-txtbox-id-here>');
el.value = '<your-text-here>';
return 0;
} catch {
return 1;
}
");
Java不支持多行字符串,因此前面的内容是以下内容:
int result = driver.executeScript("try{var el = document.getElementById('<your-txtbox-id-here>');el.value = '<your-text-here>';return 0;}catch{return 1;}");
如果成功设置了字符串,此方法将返回0
,否则返回1
。它应该更快,因为驱动程序不会单独发送每个键,而是在匿名函数中执行脚本并获取其返回值。
答案 4 :(得分:1)
此功能帮助我缩短了Android上的输入时间
desiredCapabilities.setCapability("ignoreUnimportantViews", true);
desiredCapabilities.setCapability("disableAndroidWatchers", true);
您可以在https://appium.io/docs/en/writing-running-appium/caps/#android-only
找到更多信息答案 5 :(得分:1)
对于新用户,在Appium 1.9〜版本中,executeJavaScript()
和setValue()
这两种方法都很好用,您可以考虑使用它。
// use js
executeJavaScript("$('#" + fieldId + "').val(testData);
// use setValue
$(By.id(fieldId)).setValue(testData);
答案 6 :(得分:0)
尝试添加以下功能以便使用appium键盘(而不是物理键盘)
capabilities.setCapability("resetKeyboard", true);
capabilities.setCapability("unicodeKeyboard", true);
答案 7 :(得分:0)
我使用以下方法提高了测试速度(用Python编写):
driver.set_value(myElement, "My Name")
而不是:
webElement.send_keys("My Name")
如果您使用的是Java,它将类似于:
driver.setValue(driver.findElement(By.name("Name")), "My Name")
另一种方法可能是adb ...(这是最快的一种,但除了appium之外你必须使用另一种东西)
//1st - Click at your WebElement
driver.click(driver.findElement(By.name("Name")))
//2nd - Using adb send your text
//adb shell input text "My Name"
adb shell input keyboard text "My Name"