Пытаюсь автоматизировать тестирование одной страницы, но из-за динамического содержимого совсем запутался. Использую 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(); }
Но это все работает раз через раз. Не могу понять в чем ошибка.