Может ли селен обрабатывать автозаполнение? - PullRequest
17 голосов
/ 19 марта 2009

У меня есть тестовый пример, который требует ввода частичного значения в текстовое поле на основе ajax и проверки того, что список содержит ожидаемое содержимое. Если это так, выберите содержание. Есть идеи, как заставить это работать?

Ответы [ 17 ]

16 голосов
/ 20 марта 2009

Команды type может быть недостаточно для запуска автозаполнения. Предложения Дэйва Уэбба в остальном точны. Мое единственное добавление заключается в том, что вам может понадобиться команда typeKeys , которая вызывает несколько отличающиеся события JavaScript, которые могут с большей вероятностью вызвать виджет автозаполнения.

8 голосов
/ 19 марта 2009

Я бы сделал это следующим образом:

  • type для ввода значения в текстовое поле.
  • waitForTextPresent или verifyTextPresent для проверки содержимого автозаполнения
  • click или mouseDown для нажатия на элемент в списке автозаполнения

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

7 голосов
/ 16 мая 2013

Для WebDriver , попробуйте это

Приведенный ниже код предназначен для автоматического поиска текста из автоматического предложения; в основном для элемента списка .

driver.findElement(By.id("your searchBox")).sendKeys("your partial keyword");
Thread.sleep(3000);
List <WebElement> listItems = driver.findElements(By.xpath("your list item locator"));
listItems.get(0).click();
driver.findElement(By.id("your searchButton")).click();
3 голосов
/ 19 октября 2011

Я использовал следующую последовательность в IDE,

  1. typeKeys
  2. waitForTextPresent
  3. MouseOver
  4. clickAt

и хорошо работал

3 голосов
/ 11 июля 2010
2 голосов
/ 19 марта 2009

Ваш вопрос немного двусмысленный.

Большинство браузеров хранят кэш значений, основанный на имени поля: это значение предлагается вашим браузером как автозаполнение, даже если вы никогда раньше не посещали сайт. Эта функция нестандартна во всех браузерах, и для селена не будет стандартного способа обнаружить / проанализировать это. Вы все еще можете сделать это, но вам придется создавать функции javascript, которые сами определяют значения. Затем вы можете использовать «eval» в селене для выполнения этих функций. Я не видел js-библиотек, которые могли бы сообщать вам эти значения в кросс-браузерной совместимой манере.

Другая альтернатива - использование ajax для отправки частично введенного значения на стороне сервера. В этом случае достаточно просто ввести значения в текстовое поле и подтвердить, что ожидаемые значения появляются. Обычно предложения автозаполнения отображаются в некотором слое на стороне клиента.

1 голос
/ 20 февраля 2014

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

Actions builder = new Actions(this.webDriver);
    WebElement element = this.getWebElement();
    for (char c : value.toCharArray()) {
        builder = builder.sendKeys(element, c + "");
        builder.pause(100);
    }

    builder.build().perform();

Затем я нашел предмет, на который хотел щелкнуть (

resultsElement.findElement(By.xpath("//li[.='" + valueLabel + "']"))

Где контейнер - это resultElement - это WebElement, который содержит набор результатов, а метка значения - это значение, которое я хочу щелкнуть.

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

1 голос
/ 26 октября 2009

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

0 голосов
/ 29 ноября 2017

Здесь есть несколько ответов с кодом. Итак, я сделаю свой вклад.

Код, который я использую для выбора элемента в компоненте автозаполнения из PrimeFaces 2.2:

driver.findElement(By.id(codigoBanco_input)).sendKeys("text");
waitForElementLocated(By.cssSelector(listItensSelector), 5);
List<WebElement> listItems = driver.findElements(By.cssSelector(listItensSelector));
Actions builder = new Actions(driver);
builder.moveToElement(listItems.get(0)).build().perform();
WebDriverWait wait = new WebDriverWait(driver, 5); 

wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(itemSelector)));
        driver.findElement(By.cssSelector(itemSelector)).click();
0 голосов
/ 25 октября 2016

Я использовал эти команды в версии Selenium IDE 2.9.1 для автозаполнение текстового поля. sendKeys (локатор, значение) clickAt (locator ,ordinString) нажмите (локатор)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...