У нас есть тикет-система, и я хочу автоматизировать некоторые ее части. Я реализовал решение, но оно не работает должным образом. Мне нужно дождаться значений выпадающих меню, и вы увидите, как страница обновится сама. Это проблематично, поскольку страница обновляется 3–4 раза, что приводит к сбою кода.
Исключение в потоке «main» org.openqa.selenium.TimeoutException: Ожидаемое условие не выполнено: ожидание, пока элемент станет доступен для клика: By.xpath: //*[@id="select2-SubReason-results"]/li[15] (проба в течение 10 секунд с интервалом 500 миллисекунд)
Параметры второго раскрывающегося меню, которые вы видите в видео, извлекаются с сервера посредством запроса POST после того, как выбор сделан из первого раскрывающегося меню. Selenium пытается открыть второе раскрывающееся меню до загрузки данных, что приводит к ожиданию строки WebElement optionWebElement = waitElement.until(ExpectedConditions.elementToBeClickable(By.xpath(optionToSelect))); и приводит к ошибка из-за пустого меню. Мне нужно открыть второе выпадающее меню только после загрузки данных или несколько раз пытаться открыть и закрыть меню в цикле, пока данные не загрузятся.
Есть видео (я я управляю страницей в видео, также размытым в целях конфиденциальности): https://streamable.com/p47d93
import java.time.Duration;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import Enums.*;
class Main {
private static WebDriver chromeDriver;
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", "C:/Users//Desktop/Selenium/ChromeDriver-win64/ChromeDriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setBinary("C:/Users//Desktop/Selenium/Chrome-win64/Chrome.exe");
chromeOptions.addArguments("user-data-dir=C:/Users//AppData/Local/Google/Chrome for Testing/User Data");
chromeDriver = new ChromeDriver(chromeOptions);
chromeDriver.get("Removed for privacy");
selectItem(Elements.Application.xPath, Applications.Computer.xPath, 0);
selectItem(Elements.SubReason.xPath, SubReasons.Printer.xPath, 1);
}
public static void sendKeys(String textareaElement, String keysToSend) {
WebDriverWait waitElement = new WebDriverWait(chromeDriver, Duration.ofSeconds(3));
waitElement.until(ExpectedConditions.elementToBeClickable(By.xpath(textareaElement)));
WebElement webElement = chromeDriver.findElement(By.xpath(textareaElement));
webElement.sendKeys(keysToSend);
}
public static void selectItem(String selectElement, String optionToSelect, int isLoadingExpected) throws Exception {
WebDriverWait waitElement = new WebDriverWait(chromeDriver, Duration.ofSeconds(3));
if (isLoadingExpected == 1) {
waitElement.until(ExpectedConditions.visibilityOfElementLocated(By.className("loading")));
waitElement.until(ExpectedConditions.invisibilityOfElementLocated(By.className("loading")));
}
WebElement selectWebElement = waitElement.until(ExpectedConditions.elementToBeClickable(By.xpath(selectElement)));
selectWebElement.click();
WebElement optionWebElement = waitElement.until(ExpectedConditions.elementToBeClickable(By.xpath(optionToSelect)));
optionWebElement.click();
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... ge-loading
Selenium Как дождаться загрузки страницы ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение