У нас есть тикет-система, и я хочу автоматизировать некоторые ее части. Я реализовал решение, но оно не работает должным образом. Мне нужно дождаться значений выпадающих меню, и вы увидите, как страница обновится сама. Это проблематично, поскольку страница обновляется 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
Программисты JAVA общаются здесь
1728045838
Anonymous
У нас есть тикет-система, и я хочу автоматизировать некоторые ее части. Я реализовал решение, но оно не работает должным образом. Мне нужно дождаться значений выпадающих меню, и вы увидите, как страница обновится сама. Это проблематично, поскольку страница обновляется 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();
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79054322/selenium-how-to-wait-page-loading[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия