如何在Selenium中单击其href具有某个子字符串的链接?

时间:2013-09-27 19:28:10

标签: java selenium

以下是一组链接<a elements. 只有一个 他们有一个子字符串&#34; long&#34;作为属性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有子字符串&#34; long&#34;在里面。我怎么能这样做?

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

4 个答案:

答案 0 :(得分:95)

  

我需要点击href中有子串“long”的链接。我怎么能这样做?

具有CSS选择器的美感。

你的陈述是......

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

这意味着,用英语,

  

找到任何'a'元素,其中包含href属性,以及该属性contains'long'

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

找到

答案 1 :(得分:5)

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

答案 2 :(得分: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>标记并将它们存储在list.After中,我们逐个迭代列表以查找其<a>标记href属性包含长字符串。然后我们点击该特定<a>标签,然后退出循环。

答案 3 :(得分:0)

还可以借助xpath locator来实现相同的目标。

您的声明将是:

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

要单击所有URL中包含长链接的链接,可以使用:-

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

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