这是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
答案 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相比,它存在一些问题:
tbody
可能不会出现在所有浏览器中[@class='navItem relative']
的限定符td[5]
是多余的(尽管这不是一个问题)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']
等等。