Appium: очистить поле

Теперь у меня есть экран входа в приложение. Каждый раз, когда приложение запускается на экране, мобильный номер предварительно заполняется старым текстом.

Я просто хочу знать, что я пробовал:

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

Я пробовал:

String Mobile
mob="";   

но все же он не может удалить предварительно заполненный текст.

Я пытаюсь автоматизировать приложение для Android с помощью appium, пожалуйста, помогите мне с этим.

Ответ 1

Это определенно неэффективно, может быть улучшено, и, вероятно, лучший способ... Но, используя коды событий ввода кода adb, я просто назвал "dpad right", чтобы переместить курсор полностью вправо. После этого отправьте key code "DEL", чтобы начать удаление всего обратного пути... Итак... два for-loops. В основном это использовалось для коротких текстов:

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"
    }
}

mDriver - это экземпляр AppiumDriver. Надеюсь, это поможет чему-то.

Ответ 2

У меня тоже были проблемы с этим. Основная проблема, которую я обнаружил, заключалась в том, что для удаления области нажатием клавиши удаления было необходимо нажать в конце строки. Это работает для меня:

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);
}

Это намного медленнее, чем просто очистить все, но я еще не понял, как это сделать. Было бы идеально для двойного нажатия, или нажмите и удерживайте, пока все не будет выбрано.

Ответ 3

Кликните на textBox, прежде чем очистить, чтобы сделать с последними библиотеками:

WebElement mob = driver.findElement(By.name("Mobile Number"));
mob.click();
mob.clear();

ИЛИ из примера jUnitTest здесь

WebElement text = driver.findElement(By.xpath("//UIATextField[1]"));
text.sendKeys("12");
text.clear();

Я думаю,

Ответ 4

Мы можем использовать selectAll, если тесты выполняются на android.

  • longPress в текстовом поле
  • Найдите и коснитесь элемента selectAll (кнопка Android all all)
  • sendKeyEvent (67)

Он выберет весь текст и нажмет кнопку "Удалить".

Ответ 5

Мне удалось решить эту проблему, используя следующий код: "textField(). clear()", похоже, не работал на некоторых устройствах и эмуляторах, таких как Genymotion.

while (!textField().getText().isEmpty()) {
   TouchAction touchAction = new TouchAction(driver);
   touchAction.longPress(textField());
   driver.getKeyboard().sendKeys(Keys.DELETE);
}

Код будет проходить до тех пор, пока текстовое поле не будет очищено. Надеюсь, что это поможет, работает как для Android, так и для iOS.

Ответ 6

вы можете воздержаться от использования appium, встроенного в ясный метод.

вы можете попробовать использовать входной ключ adb shell keyentent 67, который отправляет delete keyevent в android. это работает на всех версиях в значительной степени.

вы можете просто дважды щелкнуть текстовое поле, чтобы выделить текст:

WebElement mob = driver.findElement(By.tagName( "editText" ));

который найдет первый текстовый фильтр, как другие методы в привязках селена, вы также можете попробовать findElements и получить все текстовые поля в массиве, и вы можете выбрать, какой из них вы хотите манипулировать.

тогда отправьте входной ключ 67 для удаления всего поля.

Ответ 7

Если текстовое поле содержит любой предварительно определенный номер мобильного телефона, сделайте следующее.

WebElement mob = driver.findElement(By.name( "xxxxxxxxxx" )); mob.clear();

xxxxxxxxxx: номер мобильного телефона, который предварительно задан при открытии приложения.

Другие используют некоторые другие методы определения местоположения, такие как By.xpath, By.id(если вы тестируете Android и Selendroid как возможность) и т.д.

Ответ 8

Этот метод работал у меня, хотя я пытаюсь найти лучшее решение. Тем временем, пожалуйста, используйте этот метод.

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);

}

Ответ 9

Чтобы избежать недавних ошибок iOS 8.x, я использую следующее (где by - экземпляр By, представляющий ваше текстовое поле/текстовое представление):

    int stringLength = driver.findElement(by).getText().length();
    if (stringLength > 0) {
        driver.findElement(by).clear();
    }

Если вы попытаетесь вызвать clear() против уже ясного текстового поля, я пытался получить ошибки в appium.

Ответ 10

Недавно я столкнулся с подобной проблемой. То, что я сделал, получить текст из текста редактирования, если equals "", а затем отправить еще ключи, называемые clear().

Ответ 11

Я столкнулся с той же проблемой, но нашел одно правильное решение.

 public void clearTextBox(WebElement element) throws Exception
  {
      element.click();
      element.sendKeys(Keys.CONTROL + "a");
      element.sendKeys(Keys.DELETE);          
  }

Это будет работать точно.

Ответ 12

Обычно это происходит, когда открытый экран в вашем приложении является "WebView".

При столкновении с подобной проблемой я выполнил следующие шаги:

  •  
  • Получено значение текстового поля, то есть предварительно заполненного текста, используя метод 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

Ответ 13

driver.findElement(By.name("Mobile Number")).clear();

это работает для меня. Я использую элемент find по id, а затем вызываю clear.

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

Это очищает предварительно введенные данные в поле имени пользователя в моем случае.

Ответ 14

Я столкнулся с той же проблемой.

Пробовал щелкнуть, очистить и отправить ключи, это сработало.

Смотрите этот код

driver.findElement(By.name("address").click(); 
driver.findElement(By.name("address").clear();
driver.findElement(By.name("address").sendKeys("something");`

Ответ 15

Это о экране входа в систему, поэтому я предлагаю перезапустить приложение каждый раз, когда вы запустите свой script, перейдите в appium и установите флажок "Полный" Reset в настройках Android.

Ответ 16

Я работаю с python, и это то, что я использую:

 self.driver.find_element_by_id(element_id).click()
 self.driver.find_element_by_id(element_id).send_keys('')

Я надеюсь, что это поможет.

Ответ 17

Для iOS я могу выполнить backspace/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++;
    }

Ответ 18

Эту вещь можно преодолеть, используя последнюю версию appium. В старой версии ясно иногда не очищается все текстовые поля в случае более длительного текста.

Ответ 19

    WebElement element2 = appiumDriver.findElement(By.xpath(element));
        element2.sendKeys(Keys.CONTROL + "a");
         element2.sendKeys(Keys.DELETE);

Ответ 20

public void clearLocation() {
        this.clearLocation();

    }

Ответ 21

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();

Обратите внимание, что это сработало для меня, но вам, возможно, придется маневрировать своим кодом в соответствии с вашими требованиями, спасибо.

Ответ 22

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)

Ответ 23

Что помогло мне, так это добавить пустые sendKeys перед ясными.

Вот так:

public void sendKeysToElement(WebElement element, String keys) {
    element.sendKeys("");
    element.clear();
    element.sendKeys(keys);
    driver.hideKeyboard();
}

Этот метод используется для всех наших полей ввода. Без пустых sendKeys он не очищал все поля должным образом.

Ответ 24

Я использую cucumber и ruby для написания своих тестов, и это хорошо работает как для iOS, так и для Android.

arg1 и arg2 - это входные значения, которые я выдаю в шагах gherkin.

And(/^I enter "([^"]*)" on identifier "([^"]*)"$/) do |arg1, arg2|
      Input = find_element(id: arg2)
      Input.click
      Input.clear
      Input.send_keys(arg1)
    end

Ответ 25

У меня работает:

action.longPress(WebElement).perform();
WebElement.clear();

Ответ 26

Я использую двойную вкладку и отправляю пустой ключ в поле. Это работает стабильно в моих тестах пользовательского интерфейса.

new TouchAction<>((AndroidDriver<?>) driver).tap(new TapOptions().withTapsCount(2).withElement(new ElementOption().withElement(element))).perform();
element.sendKeys("");

Ответ 27

У меня было трудное время для решения этой проблемы, так как при автоматизации ios APP не удалось очистить определенное поле

не смог использовать и другие альтернативы, так что в моем случае это сработало!

1. Получите XPath кнопки удаления на клавиатуре, затем зациклите ее и используйте метод щелчка, чтобы очистить ее, это то, что сработало в моем случае

for(int x=1;x<6;x++)
{
    driver.findElementByXpath("//XCUIElementTypeKey[@name='Delete']").click;
}