如何在Selenium中映射XPath?

时间:2012-11-09 15:38:28

标签: java dom xpath selenium

我目前正在尝试在屏幕抓取中映射下面显示的突出显示的行。 我已经看了w3schools并在这里查了一下,但似乎无法让我的代码正确。我的selenium脚本不断出错,无法识别元素。

xpath for highlighted line

目前,我正在做类似的事情:

selenium.click("xpath=//table[@id='resultTable']/tbody/tr[@class='level3']/td[@id='resultTable_0_0_1_ob']/span/a[@class='linkOnly']");

我也试过这个:

selenium.click("xpath=//table[@id='resultTable']/tbody[1]/tr[6]/td[2]/span[1]/a[1]");

和此:

selenium.click("xpath=//table[@id='resultTable']/tbody/tr[6]/td[2]/span/a");

我做得对吗,我只是需要延迟?或者我完全错了吗?


编辑:

以下是请求的代码段。感谢指针,我没有注意到有多个具有相同名称的类!嗯,但由于某种原因,我写的其他两个XPath都不起作用。

在此代码段中,我展开了表格,以便您更好地了解表格的设置方式。再次,抱歉图像大小,但 ctrl +向上滚动应该放大图片。

table expanded

2 个答案:

答案 0 :(得分:1)

我更喜欢使用css选择器,因为它们工作得更快(目前使用webdriver + java) 所以解决你的问题就像:

  String cssSelector = "tr[class='level3']>td[id='resultTable_0_0_1_ob']>span>a[class='linkOnly']"
    driver.findElement(By.cssSelector(cssSelector)).click():
    driver.manage.timeouts.implicitWait(3,TimeUnit.SECONDS);

当你得到ID ='resultTable_0_0_1_ob'时,我认为这个ID应该有助于在页面上找到唯一元素。 解决问题的第二种方法: 如果您的网站实现的框架支持jQuery,您可以轻松使用jQuery:

JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("var x = $("tr[class='level3']>td[id='resultTable_0_0_1_ob']>span>a[class='linkOnly'];");
        stringBuilder.append("x.click();");
        js.executeScript(stringBuilder.toString());

并且不要忘记在firefox中验证firepath(firebug扩展名)中的xpaths,css选择器。 提供以下图片: firepath

希望这会对你有所帮助。

答案 1 :(得分:0)

的xpath = //表[@ ID = 'resultTable'] / tbody的/ TR [@类= '级别3'] / TD [@ ID = 'resultTable_0_0_1_ob'] /跨度/ A [@类= 'linkOnly']

对应的CSS是css =#resultTable> tbody> tr.level3> #resultTable_0_0_1_ob> span> .linkOnly