Перейти к содержимому

Фотография

AJAX, ExpectedConditions и Page Object в WebDriver


  • Авторизуйтесь для ответа в теме
В этой теме нет ответов

#1 Keiga

Keiga

    Постоянный участник

  • Members
  • PipPipPip
  • 174 сообщений
  • ФИО:Евгений
  • Город:Москва


Отправлено 29 марта 2013 - 09:50

Добрый день.

Пытаюсь автоматизировать тестирование одной страницы, но из-за динамического содержимого совсем запутался. Использую Selenium WebDriver + IE + Java + Page Object

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

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

Как подружить проверку типа ExpectedConditions.textToBePresentInElement и объявленный в Page Object WebElement? Либо как реализовать задержку ожидания выполнения запроса.

Вот кусок с элементами одного из окон:
@FindBy(css = "#divCustomer button")
    private WebElement CustButton;
 
    @FindBy(css = "div#CustomerID-awepw [name=search]")
    private WebElement CustSearchField;
 
    @FindBy(css = "div#CustomerID-awepw button[type=submit]")
    private WebElement CustSearchButton;
 
    @FindBy(css = "div[aria-labelledby=\"ui-id-6\"] button[role=button]:nth-child(1)")
    private WebElement CustSelectButton;
 
    @FindBy(css = "div#CustomerID-awepw tr.awe-li:nth-child(1)")
    private WebElement CustListElement;


Вот метод:

public void setCustomer(String s) {
        CustButton.click(); //Вызываем окно
        CustSearchField.sendKeys(s); // Вводим значение в поле Поиск
        CustSearchButton.click(); // Жмем "искать"
        // Тут должно быть ожидание загрузки найденной строки
        CustListElement.click(); // Выбираем первый элемент в результатах
        CustSelectButton.click(); // Жмем на кнопку "Выбрать и закрыть окно"
    }

Почитал похожие вопросы в гугле и решил сделать по другому.

Объявил отдельный элемент на выдачу поиска:

@FindBy(css = "div#CustomerID-awepw tr.awe-li:nth-child(1) span")
    private List<WebElement> CustList;

После чего пробовал переписать метод так, что после нажатия кнопки "Поиск" шёл поиск записи == поисковому запросу, а в случае если она найдена то метод бы выбирал её и прерывал цикл:

public void setCustomer(String s) throws Exception {
        WebDriverWait wait = new WebDriverWait(driver, 10);
        CustButton.click();
        CustSearchField.clear();
        CustSearchField.sendKeys(s);
        CustSearchButton.click();
        M2:for (int second = 0;second < 15; second++)
            {
            for(byte i=0;i<=CustList.size();i++)
                {  
                if(CustList.get(i).getText().equals(s))
                    {
                   CustList.get(i).click(); break M2;
                    }
                }
            Thread.sleep(1000);
            }
        CustSelectButton.click();
       }

Но это все работает раз через раз. Не могу понять в чем ошибка.
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных