通过xpath w.r.t查找元素到其他元素

时间:2014-08-20 05:49:55

标签: java selenium xpath

我正在尝试通过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)

1 个答案:

答案 0 :(得分:2)

使用//启动xpath将搜索文档根目录中的所有后代。如果您只想搜索给定元素的后代,请从点开始:.//。同样,使用/启动xpath将从文档的根目录进行搜索。要从给定元素中搜索,只需删除/,所以

ancestor::table[1]/following-sibling::ul//a[text()='text node2']

而不是

/ancestor::table[1]/following-sibling::ul//a[text()='text node2']