我正在尝试通过Xpath w.r.t其他元素的xpath找到一个元素。
在下面的HTML结构中:
<div id='frmKonyLib_pxwgmctProj'>
<ul>
<li>
<ul>
<li>
<table>
<tbody>
<tr>
<td>
<img> ------>node 1
</td>
<td>
</td>
</tr>
</tbody>
</table>
<ul show = "true"> ---> element is visible
<li>
<table>
<tbody>
<tr>
<td>
<img> ------>node 2
</td>
<td>
<a>text node1</a>
</td>
</tr>
</tbody>
</table>
<ul show = "false">
<li>
<table>
<tbody>
<tr>
<td>
<img> ------>node 3
</td>
<td>
<a>text node2</a>
</td>
</tr>
</tbody>
</table>
<ul>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>
</li>
</ul>
</li>
<li>
</li>
</ul>
</div
我为编写node1,textnode1和textnode2而编写的代码是:
WebElement templateElement = driver.findElement(By.xpath("//*[@id='frmKonyLib_pxwgmctProj']/ul/li[1]/ul/li[1]/table/tbody/tr/td[1]/img"));
WebElement formElement = templateElement.findElement(By.xpath("//a[text()='text node1']"));
WebElement widgetElement = formElement.findElement(By.xpath("/ancestor::table[1]/following-sibling::ul//a[text()='text node2']"));
在上面的代码中找到了formElement,但是为widgetElement抛出了一个异常。 请帮我弄清楚逻辑的错误和代码建议。
以下是抛出的异常:
'Exception in thread "main" org.openqa.selenium.NoSuchElementException: no such element
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:191)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:268)
at org.openqa.selenium.remote.RemoteWebElement.findElement(RemoteWebElement.java:171)
at org.openqa.selenium.remote.RemoteWebElement.findElementByXPath(RemoteWebElement.java:244)
at org.openqa.selenium.By$ByXPath.findElement(By.java:344)
at org.openqa.selenium.remote.RemoteWebElement.findElement(RemoteWebElement.java:167)
at com.kony.vizAutomation.px.utils.PXUtils.selectWidgetByID(PXUtils.java:195)
at com.kony.seleniumexample.SelectWidgetInPX.main(SelectWidgetInPX.java:16)
答案 0 :(得分:2)
使用//启动xpath将搜索文档根目录中的所有后代。如果您只想搜索给定元素的后代,请从点开始:.//。同样,使用/启动xpath将从文档的根目录进行搜索。要从给定元素中搜索,只需删除/,所以
ancestor::table[1]/following-sibling::ul//a[text()='text node2']
而不是
/ancestor::table[1]/following-sibling::ul//a[text()='text node2']