我不能为我的生活找出正在发生的事情。代码很简单:
//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网站左栏的邮件链接。为什么这么难?
答案 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以错误的方式处理您的事件。