Appium selenium 字段中的明文
Posted
技术标签:
【中文标题】Appium selenium 字段中的明文【英文标题】:Appium selenium clear text in the field 【发布时间】:2016-01-13 03:58:54 【问题描述】:有没有办法我可以在编辑字段中选择完整的文本并删除。我正在尝试使用 Selenium Appium 和 Java 自动化移动应用程序,并且有一个包含 10-15 个字符的字段。我想删除字段中的现有内容,然后使用 .sendkeys() 命令对其进行更新。
driver.findElement(By.xpath("elmentpath")).clear(); -- 不工作 还 driver.findElement(By.xpath("elmentpath")).click(); -- 这个命令点击字符串的中心,之后如果我运行 driver.sendKeyEvent(androidKeyCode.BACKSPACE); --- 它只清除了一半的字符串,所以如果有办法点击字符串的末尾,我可以运行 driver.sendKeyEvent(AndroidKeyCode.BACKSPACE); -- 命令在一个带有字符串长度的循环中。请帮忙
【问题讨论】:
这里有一些不错的答案:***.com/questions/22679960/appium-clear-a-field 点击进入字段后,可以发送CTRL+A全选,然后退格吗? 【参考方案1】:您可以使用 element.clear() 或 element.sendKeys("")。虽然不推荐使用第二个,但是当我的开发框的显示文本大小设置为中或更大时,我不得不使用它。
【讨论】:
【参考方案2】:我认为你可以设置一个 selenium Actions 类的实例来支持 CTRL+A 和删除。
WebElement textWebElement = webDriver.findElement(By.xpath("elmentpath"));
Actions actions = new Actions(webDriver);
actions.sendKeys(textWebElement, Keys.chord(Keys.CONTROL, "a").perform();
actions.sendKeys(textWebElement, Keys.DELETE).perform();
我不确定这如何与 Android API 配合使用,但这是我通常在我的 junit 内容中处理它的方式。
请注意,CTRL+A 事件作为和弦发送,而不是作为单独的事件或作为字符数组发送。
祝你好运!
【讨论】:
【参考方案3】:您是否尝试过双击网页元素以突出显示整个文本,然后按一个退格键来清除整个文本。
TouchAction action = new TouchAction(driver).tap(element).waitAction(800).tap(element);
action.perform();
driver.sendKeyEvent(AndroidKeyCode.BACKSPACE);
【讨论】:
【参考方案4】:如果您尝试自动化 android 应用程序,那么您可以直接获取文本字段的 id 并传递值。它会清除内容。
WebElement textfield = webDriver.findElement(By.id("text-field ID"));
textfield.sendKeys("values");
【讨论】:
【参考方案5】:Appium 旧版本存在问题。尝试使用最新版本的 Appium。我使用的是 1.4.16.1,之后我再也没有遇到过这样的问题。
更多详情请参考链接 - https://github.com/appium/appium/issues/4565
如果您在使用更新版本后仍然遇到问题,请告诉我。!谢谢。
【讨论】:
【参考方案6】:MobileElement element = driver.findElement(By.id("id_data"));
Rectangle rectangle = element.getRect();
int YAxis = element.getCenter().getY();
int XAxis = rectangle.getWidth();
TouchAction action = new TouchAction(this.getiosDriver());
action.tap(TapOptions.tapOptions().withPosition(PointOption.point(XAxis,
YAxis))).perform();
element.clear();
使用 Appium 1.21.0 为 iOS 14 工作
【讨论】:
【参考方案7】:我遇到了同样的问题,并且使用 WebElemnt.clear() 无法正常工作,因此为了尝试准确模拟 humain 干预,我使用了:
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.android.nativekey.AndroidKey;
import io.appium.java_client.android.nativekey.KeyEvent;
// I am using AndroidDriver for Android testing (new AndroidDriver<AndroidElement>(nodeUrl, capabilities))
AndroidDriver<AndroidElement> androidDriver = (AndroidDriver<AndroidElement>)driver;
String presentText = webElement.getText();;
if(presentText != null)
// Put the cursor on the desired testfield
webElement.sendKeys("");
// Press delete button as many times as the existing text length
for (int i = 0; i < presentText.length(); i++)
androidDriver.pressKey(new KeyEvent(AndroidKey.DEL));
这段代码完全符合我的预期
【讨论】:
以上是关于Appium selenium 字段中的明文的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Selenium+Appium 和 java 测试随机值
枚举 Appium 的 Selenium Python 绑定中的所有元素