您的代码几乎正确。
但是By.linkText 可以处理您在网站上看到的链接文本(在应用所有 CSS 之后)。
如果您查看http://live.guru99.com/,您会发现您正在搜索的链接是大写字母:
“我的帐户”
但您试图找到“我的帐户”。
所以只需将代码中的第三行更改为:
WebElement element=Driver.findElement(By.linkText("MY ACCOUNT"));
一切都应该正常工作!
小心!
我看到人们使用以下代码回答:
Driver.findElement(By.xpath("//a[@title='My Account']"))
这很危险!为什么?因为有两个元素适合这个 findElement 查询!!通过运行以下代码自行检查:
System.out.println(Driver.findElements(By.xpath("//a[@title = 'My Account']")).size());
这将返回 2! (第一个链接直接显示为“我的帐户”,如果您单击“帐户”,则可以看到另一个链接,然后在下拉列表中有另一个链接显示为“我的帐户”。两个链接具有相同的标题但是不同的元素)。
我们很幸运,在这种情况下,这两个元素都会将您带到相同的所需位置。
但是根据我的经验,通常情况并非如此。在许多写得不好的网站上,您有多个具有相同标题的元素,那么如果这种查询返回的元素返回了您想要的元素,那纯属运气。
因此,最好使用“findElements”检查有多少元素适合您的查询。
更安全
假设有一天这个 guru99 网站决定对两个链接都使用大写字母。那么这个答案的方法也会遇到这个问题。
这就是为什么使用另一个定位器来缩小链接搜索范围的好策略。
分析我会选择“页脚”的网站:
WebElement footer=Driver.findElement(By.className("footer"));
WebElement link=footer.findElement(By.linkText("MY ACCOUNT"));