Как я могу выбрать случайный продукт в Selenium Java

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

//Select random product.
    List<WebElement> allProducts= driver.findElements(By.xpath("//div[@class='m-grid-col-9']"));
    int allList= allProducts.size();
    Random random= new Random();
    int RandomUrun= random.nextInt(allList);
    allProducts.get(RandomUrun).click();

Я пытаюсь получить случайный продукт на этом сайте: https://www.turkcell.com.tr/pasaj/cep-telefonu

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы используете неправильный локатор. //div[@class='m-grid-col-9'] соответствует некоторому контейнеру, в котором находятся все эти продукты. Вместо этого вы можете использовать этот XPath:

"//div[@class='m-grid-col-4 product']"

Приведенный выше локатор можно даже сократить до этого CSS-селектора:

"div.product"

Итак, вместо List<WebElement> allProducts= driver.findElements(By.xpath("//div[@class='m-grid-col-9']")); попробуйте

List<WebElement> allProducts= driver.findElements(By.cssSelector("div.product"));

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

на этот раз я попытался, как вы сказали, но на этот раз это дало мне ошибку «этот элемент не кликабельный».

user19313533 27.11.2022 22:50

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

Prophet 27.11.2022 22:53

Хорошо, я жду

user19313533 27.11.2022 22:53

Сделанный. Надеюсь, вы знаете, как прокручивать элемент в представлении?

Prophet 27.11.2022 22:55

Я использовал js.executeScript("window.scrollBy(0,900)"); но снова выдал ту же ошибку.

user19313533 27.11.2022 22:57

Нет, вам нужно прокрутить конкретный выбранный элемент в представление. Для некоторых элементов вам вообще не нужно будет прокручивать, для других нужно, для третьих делать это больше. Зависит от расположения случайно выбранного элемента

Prophet 27.11.2022 22:59

Примерно так: stackoverflow.com/a/20487332/3485434

Prophet 27.11.2022 23:04

В вашем случае элемент уже существует, поэтому вам нужно будет применить к нему это ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);

Prophet 27.11.2022 23:05

Ты лучший!

user19313533 27.11.2022 23:10

Другие вопросы по теме