Appium:清除字段

Appium:清除字段,appium,Appium,我现在在应用程序中有我的登录屏幕。每次在屏幕上启动应用程序时,手机号码都会预先填入较旧的文本 我只想知道我试过: WebElement mob = driver.findElement(By.name("Mobile Number")); mob.clear // Not working 我试过: String Mobile mob=""; 但它仍然无法删除预先填充的文本 我正在尝试使用appium自动化我的android应用程序,请帮助我。如果文本字段包含任何预先指定的手机号码,请按

我现在在应用程序中有我的登录屏幕。每次在屏幕上启动应用程序时,手机号码都会预先填入较旧的文本

我只想知道我试过:

WebElement mob = driver.findElement(By.name("Mobile Number"));
mob.clear // Not working
我试过:

String Mobile
mob="";   
但它仍然无法删除预先填充的文本


我正在尝试使用appium自动化我的android应用程序,请帮助我。

如果文本字段包含任何预先指定的手机号码,请按以下方式执行

WebElement mob=driver.findElement(By.name(“xxxxxxxxx”); mob.clear()

XXXXXXXXX:打开应用程序时预先指定的手机号码


或者使用其他一些定位技术,如By.xpath、By.id(如果您将android和Selendroid作为功能进行测试)等。

您可能希望避免使用appium内置的clear方法

您可以尝试使用adb shell input keyevent 67,它向android发送一个delete keyevent。 这几乎适用于所有版本

只需单击文本字段两次即可突出显示文本:

WebElement mob=driver.findElement(按.tagName(“editText”)

与selenium绑定中的其他方法一样,这将定位第一个textField Available, 您还可以尝试findElements,获取数组中的所有文本字段,并可以选择要操作的任何文本字段


然后,发送一个input keyevent 67来删除整个字段。

我也遇到了这个问题。我发现的一个主要问题是,要通过按delete键删除该区域,需要点击行的末尾。这对我很有用:

public void clearTextField(WebElement element) {
    double x = element.getLocation().getX() + element.getSize().width - 5;
    double y = element.getLocation().getY() + ((double) element.getSize().height / 3);
    preciseTap(x, y, 0.1, 1);
    while (!element.getText().isEmpty()) {
        pressDeleteKey();
    }
}

public void preciseTap(double x, double y, double duration, int touchCount) {
    JavascriptExecutor js = (JavascriptExecutor) driver;
    HashMap<String, Double> tapObject = new HashMap<String, Double>();
    tapObject.put("x", x);
    tapObject.put("y", y);
    tapObject.put("touchCount", (double)touchCount);
    tapObject.put("duration", duration);
    js.executeScript("mobile: tap", tapObject);
}

public void pressDeleteKey() {
    HashMap swipeObject = new HashMap();
    swipeObject.put("keycode", 67);
    ((JavascriptExecutor) driver).executeScript("mobile: keyevent", swipeObject);
}
public void clearTextField(WebElement){
双x=element.getLocation().getX()+element.getSize().width-5;
双y=element.getLocation().getY()+((双)element.getSize().height/3);
精度ap(x,y,0.1,1);
而(!element.getText().isEmpty()){
按DeleteKey();
}
}
公共无效精度AP(双x,双y,双持续时间,整数接触计数){
JavascriptExecutor js=(JavascriptExecutor)驱动程序;
HashMap tapObject=新建HashMap();
tapObject.put(“x”,x);
tapObject.put(“y”,y);
tapObject.put(“touchCount”,(双)touchCount);
tapObject.put(“持续时间”,持续时间);
js.executeScript(“移动:点击”,点击对象);
}
public void pressDeleteKey(){
HashMap swipeObject=新HashMap();
swipeObject.put(“键码”,67);
((JavascriptExecutor)driver).executeScript(“mobile:keyevent”,swipeObject);
}

这比完全清除要慢得多,但我还不知道怎么做。最好是双击或按住,直到所有内容都被选中。

这肯定不是有效的,可以改进,可能还有更好的方法。。。 但是,使用adb的shell输入键事件代码,我简单地称之为“dpad right”,将光标一直向右移动。一旦有,发送关键代码“德尔”开始删除所有的方式回来。。。 所以两个用于循环。这主要用于短文:

public void cleatTextFully(WebElement element) {
    int stringLength = element.getText().length();

    for (int i = 0; i < stringLength; i++) {
        mDriver.sendKeyEvent(22); // "KEYCODE_DPAD_RIGHT"
    }

    for (int i = 0; i < stringLength; i++) {
        mDriver.sendKeyEvent(67); // "KEYCODE_DEL"
    }
}
public void cleatTextFully(WebElement){
int stringLength=element.getText().length();
对于(int i=0;i
mDriver是AppiumDriver实例。
希望这对你有所帮助。

当你的应用程序中打开的屏幕是“网络视图”时,通常会发生这种情况。

当遇到类似问题时,我遵循以下步骤:

  • 使用“getAttribute”方法获取文本字段的值,即预填充文本。然后检索字符串的长度,以便知道要删除的字符数

  • 点击文本字段。

  • 使用iOS键盘的“删除按钮”元素删除文本字段中的字符。

  • 在文本字段中填入必要的值。
  • 下面是可能帮助您解决问题的代码:

    WebElement ele = driver.findElement(By.xpath("//Locator of the textfield")); //Locating the textfield int characters_to_delete = ele.getAttribute("value").length();//Counts the number of characters to delete ele.click(); //Tapping or Clicking on the textfield // Deleting or Clearing the textfield off of the prefilled values for(int i=0;i<characters_to_delete;i++){ driver.findElement(By.xpath("//Locator of the Keyboard button 'Delete' ")).click(); } ele.sendKeys("value to be filled in the textfield"); //Filling the textfield with the value WebElement ele=driver.findElement(By.xpath(“//文本字段的定位器”)//查找文本字段 int characters_to_delete=ele.getAttribute(“value”).length()//统计要删除的字符数 ele.click()//点击或单击文本字段 //删除或清除预填充值的文本字段 对于(int i=0;i 这对我很有用。我正在使用find元素by id,然后调用clear

    wd.findElement(By.id("username")).clear();
    

    这将清除我案例中用户名字段中预先输入的数据。

    此方法对我有效,尽管我正在尝试更好的解决方案。同时,请使用此方法

    public void clear(String locatorType, String locator, long... waitSeconds)
    {
    
    WebElement we =  getElementWhenPresent(getByLocator(locatorType, locator), waitSeconds);
    
    String text = we.getText();
    
    int maxChars = text.length();
    
    //we.clear() is not working
    
    for (int i = 0; i < maxChars; i++)
    
    ((AppiumDriver)driver).sendKeyEvent(67);
    
    }
    
    public void clear(字符串定位器类型、字符串定位器、长…等待秒)
    {
    WebElement we=getElementWhenPresent(getByLocator(locatorType,locator),waitSeconds);
    String text=we.getText();
    int maxChars=text.length();
    //we.clear()不起作用
    对于(int i=0;i
    我也面临同样的问题

    尝试单击、清除和发送密钥,成功了

    请参阅此代码


    如果在android上执行测试,我们可以使用selectAll

    • 文本字段上的长按
    • 找到并点击selectAll元素(Android全选按钮)
    • sendKeyEvent(67)

    它将选择整个文本并按delete键。

    为了避免最近的iOS 8.x错误,我使用以下命令(其中by是by的一个实例,表示您的textfield/textview):


    如果您尝试对已清除的文本字段调用clear(),我可能会在appium中出错。

    在清除之前单击文本框应该可以处理最新的libs:

    WebElement mob = driver.findElement(By.name("Mobile Number"));
    mob.click();
    mob.clear();
    
    或者来自示例jUnitTest


    我想这是关于登录屏幕的,所以我建议每次运行脚本时重新启动应用程序,转到appium并在Android设置中检查完全重置。

    我遇到了类似的问题
    driver.findElement(By.name("address").click(); 
    driver.findElement(By.name("address").clear();
    driver.findElement(By.name("address").sendKeys("something");`
    
        int stringLength = driver.findElement(by).getText().length();
        if (stringLength > 0) {
            driver.findElement(by).clear();
        }
    
    WebElement mob = driver.findElement(By.name("Mobile Number"));
    mob.click();
    mob.clear();
    
    WebElement text = driver.findElement(By.xpath("//UIATextField[1]"));
    text.sendKeys("12");
    text.clear();
    
     self.driver.find_element_by_id(element_id).click()
     self.driver.find_element_by_id(element_id).send_keys('')
    
    while (!textField().getText().isEmpty()) {
       TouchAction touchAction = new TouchAction(driver);
       touchAction.longPress(textField());
       driver.getKeyboard().sendKeys(Keys.DELETE);
    }
    
        //Get the keyword
        String name = driver.findElement(by).getText();
        WebElement e1 = driver.findElement(by);
        System.out.println("Length of Keyword = " +name.length());
        int count = 0;
        int keywordlength = name.length();
        //click on keyword textbox
        e1.click();
        while (count < keywordlength) {
            //Clear the keyword
               TouchAction ta = new TouchAction(driver);
               ta.longPress(e1);
               driver.getKeyboard().sendKeys(Keys.DELETE);
               count++;
        }
    
        WebElement element2 = appiumDriver.findElement(By.xpath(element));
            element2.sendKeys(Keys.CONTROL + "a");
             element2.sendKeys(Keys.DELETE);
    
    List<WebElement> x=driver.findElements(By.className("enter widget details")); //You can get widget details via android UIautomator
    driver.findElementById("enter widget details").click(); //You can get widget details via android UIautomator
    x.get(index).clear();
    x.get(index).clear();
    
    def Clear(self):
        self.driver.keyevent(123)#Move Cursor Last one
        time.sleep(2)
        for i in range(10):
            self.driver.keyevent(67)#Deleted Keyboard 
            self.driver.implicitly_wait(60)
    
    public void sendKeysToElement(WebElement element, String keys) {
        element.sendKeys("");
        element.clear();
        element.sendKeys(keys);
        driver.hideKeyboard();
    }
    
    And(/^I enter "([^"]*)" on identifier "([^"]*)"$/) do |arg1, arg2|
          Input = find_element(id: arg2)
          Input.click
          Input.clear
          Input.send_keys(arg1)
        end
    
     public void clearTextBox(WebElement element) throws Exception
      {
          element.click();
          element.sendKeys(Keys.CONTROL + "a");
          element.sendKeys(Keys.DELETE);          
      }
    
    action.longPress(WebElement).perform();
    WebElement.clear();
    
    new TouchAction<>((AndroidDriver<?>) driver).tap(new TapOptions().withTapsCount(2).withElement(new ElementOption().withElement(element))).perform();
    element.sendKeys("");
    
    for(int x=1;x<6;x++)
    {
        driver.findElementByXpath("//XCUIElementTypeKey[@name='Delete']").click;
    }
    
    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();