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 字段中的明文的主要内容,如果未能解决你的问题,请参考以下文章

用appium测试的时候遇到这个报错,有没有大佬帮忙看看

如何使用 Selenium+Appium 和 java 测试随机值

枚举 Appium 的 Selenium Python 绑定中的所有元素

移动自动化与 appium -- Selenium 驱动程序

Appium hidekeyboard() 方法

appuim的简单使用及实例