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

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

Ответы [ 17 ]

0 голосов
/ 06 октября 2016

Небольшое отклонение, используя ответ Прашанта:

    /**
 * Selects the element at position idx from the autocomplete combo, considering the partialKeyword
 * @param driver
 * @param element
 * @param partialKeyword
 * @param idx
 * @throws InterruptedException
 */
public static void selectAutoCompleteValue(WebDriver driver, WebElement element, String partialKeyword, Integer idx) throws InterruptedException{
    element.sendKeys(partialKeyword);
    Thread.sleep(1000);
    List <WebElement> listItems = driver.findElements(By.cssSelector(".ui-autocomplete-item.ui-autocomplete-list-item"));
    listItems.get(idx).click();
}

Надеюсь, это поможет!

0 голосов
/ 08 октября 2015

Мне удалось решить эту проблему с помощью функции ниже: Приведенная ниже функция принимает текст, который вы хотите выбрать в качестве параметра. Пример: если вы хотите выбрать «javascript», просто введите «java» в текстовое поле и передайте текст, который вы хотите выделить, в данном конкретном случае это «javascript».

  public void selectOptionWithText(String textToSelect) {
    try {
       //Add the below sleep if necessary  
       // Thread.sleep(1000);

 WebElement autoOptions = driver.findElement(By.className("autocomplete"));

        List<WebElement> optionsToSelect = autoOptions().findElements(By.tagName("div"));
        for (WebElement option : optionsToSelect) {
            if (option.getText().equals(textToSelect)) {
                System.out.println("Trying to select: " + textToSelect);
                option.click();
                break;
            }
        }
    }
    catch(Exception e){
        System.out.println("Error");
    }
}
0 голосов
/ 04 июля 2014

Иногда TypeKeys не работает. В это время вы можете использовать keyDown

щелкните поле ввода и введите значение и ключ в поле.

0 голосов
/ 14 августа 2013

В тексте справки для команды typeKeys написано:

В некоторых случаях вам может понадобиться использовать простую команду «type» для установки значения поля, а затем команду «typeKeys» для отправки событий нажатия клавиш, соответствующих тому, что вы только что набрали.

Так что используйте эту комбинацию

type(selector, text);
typeKeys(selector, text);

Кажется, это хорошо работает.

0 голосов
/ 24 мая 2013

У нас были некоторые проблемы с typeKeys. SendKeys кажется окончательным решением, но оно все еще экспериментальное. Из справки:

Эта команда является экспериментальной. В будущем она может заменить команду typeKeys.

Для тех, кто интересуется подробностями, в отличие от команды typeKeys, которая пытается запустить события keyDown, keyUp и keyPress, эта команда поддерживается атомами из Selenium 2 и обеспечивает гораздо более надежную реализацию, которая будет сохраняться в будущем.

0 голосов
/ 08 сентября 2009

Пожалуйста, используйте typeKeys вместо type. Также используйте mouseDown вместо клика. Работает нормально.

0 голосов
/ 10 января 2011

Ответ Патрика определенно важен, я также обнаружил, что focus и mouseDown нужны в последних версиях Jquery UI. Я записал видео теста, чтобы вы могли увидеть его в Sauce Labs: https://saucelabs.com/jobs/ad8c561be39bb7a42c9bb3a063214c95

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