【问题标题】:How to click a link whose href has a certain substring in Selenium?如何单击其href在Selenium中具有某个子字符串的链接?
【发布时间】:2013-10-04 05:10:57
【问题描述】:

以下是一堆链接<a elements.只有一个有一个子字符串“long”作为属性href的值

<a class="c1" href= "very_lpng string" > name1 </a>
<a class="g2" href= "verylong string" > name2 </a>   // The one that I need
<a class="g4" href= "very ling string" > name3 </a>
<a class="g5g" href= "very ng string" > name4 </a>

...................

我需要点击href 中包含子字符串“long”的链接。我该怎么做?

PS: driver.findElement(By.partialLinkText("long")).click(); // b/c 它按名称选择

【问题讨论】:

  • 你为什么要在这个问题上提出另一个问题?您在三个小时前问了同样的问题:stackoverflow.com/questions/19055327/…
  • 对不起,我想把上一个问题删掉,再开一个新的,这样我就可以更清楚地表达自己了……这个问题值得关注,因为它并不容易看起来
  • 但显然我无法删除上一个问题。上一个问题已经有答案(不正确)
  • 对于这样的事情,最好使用 xpath,尽管我不能 100% 确定我的 xpath 是否正确:driver.findElement(By.xpath("//@href[contains(text(), 'long'.)]).click();
  • 谢谢 我试过这个方法。不幸的是它不起作用

标签: java selenium


【解决方案1】:

在 xpath 定位器的帮助下,你也可以达到同样的效果。

你的陈述是:

driver.findElement(By.xpath(".//a[contains(@href,'long')]")).click();

并且对于单击 URL 中包含 long 的所有链接,您可以使用:-

List<WebElement> linksList = driver.findElements(By.xpath(".//a[contains(@href,'long')]"));

for (WebElement webElement : linksList){
         webElement.click();
}

【讨论】:

    【解决方案2】:

    你可以这样做:

    //first get all the <a> elements
    List<WebElement> linkList=driver.findElements(By.tagName("a"));
    
    //now traverse over the list and check
    for(int i=0 ; i<linkList.size() ; i++)
    {
        if(linkList.get(i).getAttribute("href").contains("long"))
        {
            linkList.get(i).click();
            break;
        }
    }
    

    在此我们要做的是首先找到所有&lt;a&gt; 标签并将它们存储在list.After 中,我们将逐个迭代列表以找到其href 属性包含长字符串的&lt;a&gt; 标签。然后我们点击那个特定的&lt;a&gt; 标签并退出循环。

    【讨论】:

    【解决方案3】:

    我需要点击href 中包含子字符串“long”的链接。我该怎么做?

    借助 CSS 选择器的美感。

    你的陈述是……

    driver.findElement(By.cssSelector("a[href*='long']")).click();
    

    这意味着,在英语中,

    找到任何具有href 属性和该属性contains 'long' 的'a' 元素

    您可以找到一篇有用的文章,了解如何有效地制定您自己的选择器以实现自动化,以及所有其他相等运算符的列表。 containsstarts with 等...您可以在以下位置找到:http://ddavison.io/css/2014/02/18/effective-css-selectors.html

    【讨论】:

      【解决方案4】:

      使用driver.findElement(By.partialLinkText("long")).click();

      【讨论】:

      • 感谢您的回答。但是,这只有在我在链接名称中查找子字符串时才有效。如果要在 href 中查找子字符串,这将不起作用
      • 链接文本是显示的文本。这个答案不起作用,因为给出的唯一链接文本是 'name1','name2','name3','name4'。
      猜你喜欢
      • 2016-09-20
      • 2015-08-18
      • 1970-01-01
      • 2021-12-03
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多