单击链接selenium web驱动程序适用于即不是Firefox

时间:2011-11-17 02:59:25

标签: internet-explorer firefox selenium webdriver

我不能为我的生活找出正在发生的事情。代码很简单:

//WebDriver driver = new InternetExplorerDriver();  
//WebDriver driver = new FirefoxDriver();
driver.get("http://www.yahoo.com");
driver.findElement(By.xpath("//*[@id='pa-u_14782488-bd']/a/span[2]")).click();

我使用ff或ie驱动程序。但最后2行代码是一样的。适用于ie,但不适用于ff。有趣的是我从ff firebug获取xpath所以xpath对于ff是正确的。 ff版本7.0.1。它只是yahoos网站左栏的邮件链接。为什么这么难?

3 个答案:

答案 0 :(得分:2)

由于 Slanec 提到这些类型的站点使用动态id,所以在上面指定的情况下更好的选择是使用“title”属性,它具有较小的更改概率。 如果你想使用xpath,这将有效,

driver.findElement(By.xpath("//*[@title='Mail']")).click();

更好的选择是使用链接文字,因为它的工作方式与用户手动点击的方式相同...

driver.findElement(By.linkText("MAIL")).click();

答案 1 :(得分:0)

Selenium很难将元素嵌入链接(<a>)元素中。在没有XPath的最后部分的情况下尝试您的代码。所以:

//*[@id='pa-u_14782488-bd']/a

确保您还发布了您正在使用的Selenium版本,以便其他人可以为您提供更详细的帮助。

答案 2 :(得分:0)

不要使用xpath搜索..它非常不稳定,并没有帮助你的情况。此外,您的selenium代码现在与标记紧密耦合,对标记的任何更改(如引入容器(即div))都将无法通过测试。

你可以使用范围来实现类似的东西。例如:

var container=driver.findElement(By.xpath("//*[@id='pa-u_14782488-bd']"));

var spans=container.findElements(By.tagName("span"));

spans[1].Click();

此外,我不明白这是如何工作的,因为你有一个链接,因为我猜你的造型目的,你有两个跨度,但点击其中任何一个应该仍然触发相同的动作点击点击更正?或者我错过了什么?

可能就是firefox以错误的方式处理您的事件。