В своем проекте я использую 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(описание) я могу использовать описание как условие в любом случае??




Если вы наблюдаете вывод:
[[[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();
@SCS Да, в этом случае вам нужно найти теги <a> с текстом в виде лет однозначно по отношению к тексту описания. Но это звучит как совершенно другая проблема вместе взятых. Можете ли вы задать новый вопрос в соответствии с вашим новым требованием? Участники Stackoverflow будут рады вам помочь.
Это может быть проблемой, потому что контент сайта генерируется с использованием скрипта в соответствии с тем, что я искал в поисковой системе. Я не очень хорошо знаком с javascript и тем, как они генерируют результаты поиска, что возвращает меня к моему первоначальному вопросу или есть ли какие-либо другое решение для этой цели?? спасибо, я вижу только красный флажок рядом с вашим ответом
поэтому я не смог найти решение своего первоначального вопроса, но что касается обновленного вопроса, я просто перешел ко второму элементу списка, который я получил, используя: List h=driver.findElements(By.linkText("Years")); h.get(1).click(); хотя было бы намного эффективнее, если бы я мог получить URL-адрес назначения всех ссылок, сгенерированных поисковой системой.
На странице, над которой я работаю, каждый второй текст ссылки с тем же именем - это то место, куда я хотел бы перейти, также нет никакой разницы в этих ссылках, кроме их описания, например: ссылка 1: Годы ABC (описание) ссылка 2: Годы XYZ (описание) могу ли я каким-либо образом использовать описание как условие??