Selenium FindElements 方法 Java

Selenium FindElements method Java

在我的项目中我使用findElement(By.linkText("")).click(); 但在我使用的网页中,许多 link 具有相同的名称(顺便说一句,我只能使用 By.linktext)所以我想知道它可以在 link 之间导航同名

另外,当我使用 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],

更新: 在我正在处理的页面中,每第二个 link 具有相同名称的文本都是我想去的地方,而且那些 link 除了它们的描述之外没有任何区别,例如: link 1: 年 ABC(描述)

link 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],...]

所有元素的 linkTextYears。所以很明显你应该可以使用:

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

但是,有时对某些元素调用 click() 会改变 DOM Tree and the saved elements within the list may turn into stale elements

在这些情况下, as well as

因此,根据最佳实践,您可能希望在特定 linkTexts 上调用 click(),因为有必要引发 。例如:

  • 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();
    

所以我找不到原始问题的解决方案,但至于更新后的问题,我只是迭代到我使用的列表的第二个元素:List h=driver.findElements(By.linkText("年")); h.get(1).点击(); 虽然如果我能得到搜索引擎

生成的所有链接的目的地URL会更有效率