2

在我使用的项目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:ABC 年(描述)

链接2:XYZ年(描述)我可以以任何方式使用描述作为条件吗?

4

2 回答 2

1

如果您观察输出:

[[[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()特定的WebDriverWait。举个例子:linkTexts

  • 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();
    
于 2020-12-26T23:12:11.220 回答
0

所以我找不到原始问题的解决方案,但至于更新的问题,我只是迭代到我使用的列表的第二个元素: List h=driver.findElements(By.linkText("Years")); h.get(1).click(); 虽然如果我能获得搜索引擎生成的所有链接的目标 URL 会非常有效

于 2020-12-28T03:43:30.810 回答