Метод Selenium FindElements Java

В своем проекте я использую findElement(By.linkText("")).click(); но на веб-странице, которую я использую, многие ссылки имеют одно и то же имя (кстати, я могу использовать только By.linktext), поэтому я хочу знать, что можно перемещаться по ссылкам с одинаковым именем.

Также, когда я использую List<WebElement> h=driver.findElements(By.linkText("Years")); и печатаю его:

[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],

обновлять: На странице, над которой я работаю, каждый второй текст ссылки с тем же именем — это то место, куда я хотел бы перейти, также нет никакой разницы в этих ссылках, кроме их описания, например: ссылка 1: Годы азбука(описание)

ссылка 2: Годы XYZ(описание) я могу использовать описание как условие в любом случае??

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

Ответы 2

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

Если вы наблюдаете вывод:

[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],[[[FirefoxDriver: firefox on LINUX (f5681889-d73a-4a0f-88e9-2e189491049b)] -> link text: Years],...]

Все элементы имеют linkText как Years. Таким образом, вы можете использовать:

List<WebElement> h=driver.findElements(By.linkText("Years"));

Но вызов click() для определенных элементов время от времени изменяет дерево DOM , и сохраненные элементы в списке могут превратиться в устаревшие элементы.

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

Следовательно, в соответствии с передовой практикой, вы можете вызывать click() для конкретного linkTexts по мере необходимости, вызывая WebDriverWait. В качестве примера:

  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("element_css"))).click();
    
  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("element_xpath"))).click();
    

На странице, над которой я работаю, каждый второй текст ссылки с тем же именем - это то место, куда я хотел бы перейти, также нет никакой разницы в этих ссылках, кроме их описания, например: ссылка 1: Годы ABC (описание) ссылка 2: Годы XYZ (описание) могу ли я каким-либо образом использовать описание как условие??

SCS 27.12.2020 07:23

@SCS Да, в этом случае вам нужно найти теги <a> с текстом в виде лет однозначно по отношению к тексту описания. Но это звучит как совершенно другая проблема вместе взятых. Можете ли вы задать новый вопрос в соответствии с вашим новым требованием? Участники Stackoverflow будут рады вам помочь.

undetected Selenium 27.12.2020 19:54

Это может быть проблемой, потому что контент сайта генерируется с использованием скрипта в соответствии с тем, что я искал в поисковой системе. Я не очень хорошо знаком с javascript и тем, как они генерируют результаты поиска, что возвращает меня к моему первоначальному вопросу или есть ли какие-либо другое решение для этой цели?? спасибо, я вижу только красный флажок рядом с вашим ответом

SCS 28.12.2020 03:35

поэтому я не смог найти решение своего первоначального вопроса, но что касается обновленного вопроса, я просто перешел ко второму элементу списка, который я получил, используя: List h=driver.findElements(By.linkText("Years")); h.get(1).click(); хотя было бы намного эффективнее, если бы я мог получить URL-адрес назначения всех ссылок, сгенерированных поисковой системой.

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