【问题标题】:Selenium FindElements method JavaSelenium FindElements 方法 Java
【发布时间】:2020-12-26 10:19:36
【问题描述】:

在我的项目中,我使用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(说明) 我可以以任何方式使用描述作为条件吗??

【问题讨论】:

    标签: java selenium selenium-webdriver webdriver linktext


    【解决方案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],...]
    

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

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

    但是,在某些元素上调用click() 有时会更改DOM Tree,并且列表 中保存的元素可能会变成stale elements

    在这些情况下,printing the link names may failassertions

    因此,根据最佳实践,您可能希望在特定的 linkTexts 上调用 click(),因为需要诱导 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:Years XYZ(描述)我可以以任何方式使用描述作为条件吗??
    • @SCS 是的,在这种情况下,您需要根据描述文本唯一地定位文本为 Years&lt;a&gt; 标记。但这听起来是一个完全不同的问题。你能根据你的新要求提出一个新问题吗? Stackoverflow 贡献者将很乐意为您提供帮助。
    • 这可能是个问题,因为网站的内容是根据我在搜索引擎中搜索的内容使用脚本生成的对我原来的问题还是有任何其他解决方案可以达到这种目的?thx 我也只在你的答案旁边看到一个红旗
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 2017-04-13
      • 2015-10-04
      • 1970-01-01
      • 2011-07-18
      • 2018-01-19
      • 2013-01-16
      相关资源
      最近更新 更多