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;}");
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"
9条答案
按热度按时间ruarlubt1#
我用adb代替appium发送文本解决了这个问题!真的很快!
同样的方式,你可以使用这个点击,清除,安装,卸载等。。可能有一些需要睡眠线程同步问题,但它只有50 ms,这是太少了5秒,appium需要!你可以使用DDMLIB来使这个adb调用,而不是ProcessBuilder!
rslzwgfq2#
尝试:
这应该比你的方法运行得更快。
t1qtbnec3#
这个功能帮助我减少了在Android上输入的时间
您可以在这里找到更多信息https://appium.io/docs/en/writing-running-appium/caps/#android-only
nlejzf6q4#
在Appium上遇到缓慢的自动化是很常见的,因为Appium是基于客户端/服务器架构的。网络问题会影响测试的性能(除非你在安装Appium的同一台机器上运行测试)。
我可以告诉你,我也经历过在Appium上测试慢的问题。顺便说一句,它通常发生在模拟器/仿真器上。
用户体验场景发送密钥
如果你的测试需要发送按键作为用户体验场景的一部分,那么
SendKeys
是你唯一的选择。这个方法不是简单地在文本框中设置一个值,它实际上表现得像用户按下按键并将按键发送到文本框。如果这是你需要的,那么你需要了解网络级别发生了什么,因为这就是你的问题所在。还要考虑到这种方法有时会很慢(这是我的经验)。
设置文本对于测试的UX场景并不重要
如果设置文本框值的步骤不是您正在考虑的特定测试的自动化的核心部分,您可以始终通过
ExecuteScript
来实现这一点,它允许您在应用程序中执行Javascript代码。我假设您正在自动化WebView上下文。Java不支持多行字符串,所以前面的是下面的一个漂亮的打印:
如果字符串设置成功,此方法将返回
0
,否则返回1
。它应该更快,因为驱动程序不会单独发送每个键,而是在匿名函数中执行脚本并返回其返回值。qhhrdooz5#
尝试添加以下功能以便拥有appium键盘(而不是物理键盘)
kq0g1dla6#
将
sendKeys
替换为appium后续版本中可用的setValue
方法:根据我的经验,它更快。
5cg8jx4n7#
对于新手来说,在Appium 1.9~版本中,
executeJavaScript()
和setValue()
方法都很好用,可以考虑使用。wwodge7n8#
我提高了我的测试(用Python编写)的速度,使用:
而不是:
如果你使用的是Java,它将类似于:
另一种方法是使用adb...(这是最快的一种,但你必须使用除appium之外的另一种方法)
6ojccjat9#
设置在capabilities: