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