无法通过selenium web驱动程序中的By.linkText查找元素

him*_*aja 3 selenium selenium-firefoxdriver selenium-webdriver

  1. 转到http://live.guru99.com/
  2. 点击我的帐户链接
  3. 单击创建帐户链接并填写除电子邮件ID之外的新用户信息.

嗨..以上是我的测试用例.无法为帐户链接创建xpath.

这是我试过的脚本:

WebDriver Driver=new FirefoxDriver();                 
Driver.get("http://live.guru99.com/");
WebElement element=Driver.findElement(By.linkText("My Account"));       
element.click();
Run Code Online (Sandbox Code Playgroud)

如果有人帮助我会很棒.

提前致谢.

drk*_*hng 10

你的代码几乎正确的.
但是By.linkText,当您在网站上看到它时(在应用所有CSS之后),您可以使用链接文本.

如果您查看http://live.guru99.com/,您会看到您要搜索的链接是大写字母:

"我的帐户"

但你试图找到"我的帐户".

所以只需将代码中的第三行更改为:

WebElement element=Driver.findElement(By.linkText("MY ACCOUNT")); 
Run Code Online (Sandbox Code Playgroud)

一切都应该工作得很好!

小心!

我看到人们使用以下代码回答:

Driver.findElement(By.xpath("//a[@title='My Account']"))
Run Code Online (Sandbox Code Playgroud)

这很危险!为什么?因为有两个元素适合这个findElement查询!! 运行以下代码自行检查:

System.out.println(Driver.findElements(By.xpath("//a[@title = 'My Account']")).size());
Run Code Online (Sandbox Code Playgroud)

这返回2!(第一个链接直接显示为"我的帐户",另一个链接可以看到,如果您点击"帐户",然后在下拉列表中有另一个链接显示为"我的帐户".两个链接具有相同的标题,但是不同的元素).

我们很幸运,在这种情况下,两个元素都会带您到相同的位置.

根据我的经验,通常情况并非如此.在许多编写得不好的网站上,你有几个具有相同标题的元素,那么如果这种查询返回的元素返回你想要的元素,那就纯粹是好运.

因此,使用"findElement s " 检查适合查询的元素数量总是一个好主意.

更安全

假设有一天这个guru99站点将决定对两个链接使用大写.那么这个答案的方法也会遇到这个问题.

这就是为什么使用另一个定位器缩小对链接的搜索范围可能是一个好策略.

分析网站我会去"页脚":

WebElement footer=Driver.findElement(By.className("footer")); 
WebElement link=footer.findElement(By.linkText("MY ACCOUNT")); 
Run Code Online (Sandbox Code Playgroud)