如何在Selenium中点击包含特定子字符串的href链接?

57

以下是一堆链接<a elements, 只有一个 链接的 href 属性值中包含子字符串 "long"

<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(); // 因为它是通过名称选择的


你为什么要在这上面再创建一个问题?你三个小时前已经问过同样的问题了:http://stackoverflow.com/questions/19055327/selenium-how-to-navigate-element-whos-href-contains-a-certain-string - AndyPerfect
很抱歉,我想删除之前的问题,并开一个新的问题,以便我能更清楚地表达自己...这个问题值得关注,因为它并不像看起来那么简单。 - Buras
但是显然我无法删除之前的问题。之前的问题已经有一个答案(不正确)。 - Buras
2
对于这种情况,最好使用xpath,尽管我不确定我的xpath是否正确:driver.findElement(By.xpath("//@href[contains(text(), 'long'.)]).click(); - Richard
谢谢,我尝试了这种方法。不幸的是它没有起作用。 - Buras
这个“driver”是从哪里来的? - Jason G
4个回答

109
我需要点击链接,其href中包含子字符串“long”。我该怎么做?
通过美丽的CSS选择器。
你的语句将是...
driver.findElement(By.cssSelector("a[href*='long']")).click();

这意味着,在英语中,

查找任何具有href属性且该属性包含“long”的'a'元素

您可以查找一篇有关有效自动化公式化选择器以及其他所有相等运算符的有用文章。包括:包含(contains)、以…开始(starts with)等。 您可以在此链接找到:http://ddavison.io/css/2014/02/18/effective-css-selectors.html


6

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

该代码用于在网页中查找一个链接文本中包含“long”的超链接,并点击它。

6
谢谢你的回答。然而,这只适用于在链接名称中查找子字符串的情况。如果要在href中查找子字符串,则无法使用此方法。 - Buras
链接文本是显示的文本。这个答案行不通,因为给出的唯一链接文本是“name1”,“name2”,“name3”,“name4”。 - awerchniak

4
您可以这样做:
//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;
    }
}

在这里,我们首先找到所有的<a>标签并将它们存储在一个列表中。然后逐个遍历列表以查找其href属性包含长字符串的<a>标签。然后我们点击特定的<a>标签并跳出循环。


在这里,我们首先查找所有的<a>标签并将它们存储在列表中。之后,我们逐个迭代列表以查找href属性包含长字符串的<a>标签。然后,我们单击该特定<a>标签并退出循环。 - Praveen
欢迎来到Stack Overflow!请考虑在您的答案中添加一些解释,而不仅仅是代码。我们的目标是教育人们,让他们理解答案并能够在其他情况下应用它。如果您注释您的代码并添加解释,您将使您的答案对这次提问的人以及未来可能遇到相同问题的任何人更有帮助。 - starsplusplus

3
通过xpath定位器,你也可以实现相同的功能。
你的语句应该是:
driver.findElement(By.xpath(".//a[contains(@href,'long')]")).click();

如果您需要点击包含长网址的所有链接,可以使用以下方法:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接