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

时间:2015-09-18 20:58:07

标签: selenium selenium-webdriver selenium-firefoxdriver

  1. 转到http://live.guru99.com/
  2. 点击我的帐户链接
  3. 单击“创建帐户”链接并填写“电子邮件ID以外的新用户信息”。
  4. 嗨..以上是我的测试用例。无法为帐户链接创建xpath。

    这是我试过的脚本:

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

    如果有人帮助我会很棒。

    提前致谢。

4 个答案:

答案 0 :(得分:8)

您的代码几乎正确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! (第一个链接直接显示为"我的帐户"如果您点击" ACCOUNT&#34,则可以看到另一个链接;然后在下拉列表中有另一个链接可见为"我的帐户"。两个链接具有相同的标题,但是具有不同的元素。)

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

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

出于这个原因,最好使用" findElement s "来检查您的查询的元素数量。

更安全

让我们说有一天这个guru99网站会决定在两个链接上使用大写字母。那么这个答案的方法也会遇到这个问题。

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

分析我想去的网站"页脚":

WebElement footer=Driver.findElement(By.className("footer")); 
WebElement link=footer.findElement(By.linkText("MY ACCOUNT")); 

答案 1 :(得分:1)

我当然有时候我觉得应该工作的定位器没有。对我来说这也是其中一个案例。所以我尝试了其他一些东西。这对我有用:

    WebDriver Driver=new FirefoxDriver();
    Driver.get("http://live.guru99.com/");
    Driver.findElement(By.xpath("//a[@data-target-element='#header-account']")).click();
    Driver.findElement(By.xpath("//a[@title='My Account']")).click();

答案 2 :(得分:0)

WebElement element = Driver.findElement(By.xpath(" // [[@title ='我的帐户']"));

答案 3 :(得分:-2)

没有“我的帐户”链接,而是“帐户”。所以,改变 -

WebElement element=Driver.findElement(By.linkText("My Account"));

到 -

WebElement element=Driver.findElement(By.linkText("Account"));