如何单击其href在Selenium中具有某个子字符串的链接?
Posted
技术标签:
【中文标题】如何单击其href在Selenium中具有某个子字符串的链接?【英文标题】:How to click a link whose href has a certain substring in 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 它按名称选择
【问题讨论】:
你为什么要在这个问题上提出另一个问题?您在三个小时前问了同样的问题:***.com/questions/19055327/… 对不起,我想把上一个问题删掉,再开一个新的,这样我就可以更清楚地表达自己了……这个问题值得关注,因为它并不容易看起来 但显然我无法删除上一个问题。上一个问题已经有答案(不正确) 对于这样的事情,最好使用 xpath,尽管我不能 100% 确定我的 xpath 是否正确:driver.findElement(By.xpath("//@href[contains(text(), 'long'.)]).click();
谢谢 我试过这个方法。不幸的是它不起作用
【参考方案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;
在此我们要做的是首先找到所有<a>
标签并将它们存储在list.After
中,我们将逐个迭代列表以找到其href 属性包含长字符串的<a>
标签。然后我们点击那个特定的<a>
标签并退出循环。
【讨论】:
在此我们要做的是首先我们找到所有的 标签并将它们存储在一个列表中。之后我们将逐个迭代列表以找到 标签的 href属性包含长字符串。然后我们点击那个特定的 标签并退出循环。 欢迎来到 Stack Overflow!请考虑为您的答案添加一些解释,而不仅仅是代码。我们的目标是教育人们,使他们理解答案并可以将其应用于其他情况。如果您评论您的代码并添加解释,您的回答不仅对这次提出问题的人更有帮助,而且对将来可能遇到同样问题的任何人都有帮助。【参考方案3】:我需要点击href 中包含子字符串“long”的链接。我该怎么做?
借助 CSS 选择器的美感。
你的陈述是……
driver.findElement(By.cssSelector("a[href*='long']")).click();
这意味着,在英语中,
找到任何具有
href
属性和该属性contains
'long' 的'a' 元素
您可以找到一篇有用的文章,了解如何有效地制定您自己的选择器以实现自动化,以及所有其他相等运算符的列表。 contains
、starts with
等...您可以在以下位置找到:http://ddavison.io/css/2014/02/18/effective-css-selectors.html
【讨论】:
【参考方案4】:使用driver.findElement(By.partialLinkText("long")).click();
【讨论】:
感谢您的回答。但是,这只有在我在链接名称中查找子字符串时才有效。如果要在href
中查找子字符串,这将不起作用
链接文本是显示的文本。这个答案不起作用,因为给出的唯一链接文本是 'name1','name2','name3','name4'。以上是关于如何单击其href在Selenium中具有某个子字符串的链接?的主要内容,如果未能解决你的问题,请参考以下文章
如何单击使用 Selenium WebDriver 隐藏的元素?
Python Selenium bot 查看 Instagram 故事 |如何单击具有活跃故事的人的个人资料?
Selenium(Python):单击按钮后,等待所有新元素(可以具有不同的属性)被加载[重复]
在带有 selenium 的 python 中,如何轮换 IP 地址?