1

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

突出显示行的 xpath

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

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+scroll up应该放大图片。

表展开

4

2 回答 2

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 扩展)中验证您的 xpath、css 选择器。提供下图: 火路

希望这对您有所帮助。

于 2012-11-10T06:39:49.893 回答
0

xpath=//table[@id='resultTable']/tbody/tr[@class='level3']/td[@id='resultTable_0_0_1_ob']/span/a[@class='linkOnly']

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

于 2014-04-03T06:06:02.220 回答