我想找到图像的xpath

时间:2014-05-12 15:00:21

标签: java selenium xpath selenium-webdriver html-parsing

这是html代码

<div class="navBg">
<table id="topnav" class="navTable" cellspacing="0" cellpadding="0" style="-moz-user-        select: none; cursor: default;">
<tbody>
<tr>
<td class="logoCell" valign="top">
<td class="separator">
<td class="navItem relative" style="z-index: 99">
<td class="separator">
<td class="navItem relative">
<a class="content tasks" style="border-width: 0" href="/tasks/otasklist.do">
<div class="label" style="z-index:155; ">Tasks</div>
<img class="sizer" width="84" height="93" src="/img/default/pixel.gif? hash=1106906246"/>
<span class="bottomBorder">

我正在尝试找到图像的xpath - &gt;

src="/img/default/pixel.gif?hash=1106906246"

我尝试了不同的组合e:g

//table/tbody/tr/td[5][@class='navItem relative']/a/div[2]/img

我也写了以下代码。

 WebDriverWait wait= new WebDriverWait(driver, 20);
    wait.until(ExpectedConditions.elementToBeClickable(By.linkText("Tasks")));

    driver.findElement(By.xpath("//table/tbody/tr/td[5][@class='navItem relative']/a/div[2]/img")).click();
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

它通过firepath识别网页上的元素,但在运行脚本后,它没有点击元素,控制台显示&#34;没有这样的元素异常&#34;。

请仅在java lang中回答。 有人可以帮帮我。???

THX

2 个答案:

答案 0 :(得分:1)

我看到你正在使用Selenium。最安全的选择是找到具有@id属性的最近父母,并从那里开始向下工作。试试这个://table[@id='topnav']//img。正如alecxe所指出的,根据图表中图像的独特性,您可能需要将XPath缩小一点。类似于//table[@id='topnav']//tr[1]//img,甚至是//table[@id='topnav']//td[contains(@class, 'navItem')]//img

您发布的XPath无效,因为与您发布的示例HTML相比,它存在一些问题:

  1. tbody可能不会出现在所有浏览器中
  2. 元素[@class='navItem relative']的限定符td[5]是多余的(尽管这不是一个问题)
  3. div[2]不存在,您的HTML示例只显示一个div

答案 1 :(得分:0)

有多种方法可以找到img标记。具体取决于img标记属性的唯一性及其在网页上的位置。

根据Tasks div:

,找到它的一种方法
//table//div[text()='Tasks']/following-sibling::img

您还可以依赖td所在的img并检查sizer类:

//table//td[contains(@class, 'navItem')]/img[@class='sizer']

等等。