【问题标题】:How to access a webtable element using xpath if the webtable element is inside a td tag如果 webtable 元素在 td 标签内,如何使用 xpath 访问 webtable 元素
【发布时间】:2017-09-21 20:54:29
【问题描述】:

我无法访问 table2 中的 webtable 元素,请参阅下面的页面源代码:

<table id="table1">
    <tr class="head">
        <td class="left" colspan="2">
            <!--PAGE LINKS-->
        </td>
    </tr>
    <tr>
        <td class="left_link">
            <h1>
                <a name="nav_home" href="index.html" id="home_link" class="home">HOME</a><br>
                <a name="nav_adopt" href="adoption.html" id="adoption_link">ADOPTION</a><br>
                <a name="nav_about" href="about.html" id="about_link">ABOUT</a><br>
                <a name="nav_contact" href="contact.html" id="contact_link">CONTACT</a><br>
            </h1>
        </td>
        <td class="content">
            <h1>
                CONTACT US
            </h1>
            <hr>
            <p>
                Use the form below to contact us if you have any questions, queries or even any requests.
                We are always happy to hear from you all.
            </p>
            <h1 class="subhead">Contact Form</h1>
            <form name="message_form">
                <table id="table2" class="inner_table">
                    <tr>
                        <td>Enter Name</td>
                        <td><input type="text" name="name_field"></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td>
                        <input type="radio" id="rinfo" name="rbutton" value="information">Information
                        <input type="radio" id="rdona" name="rbutton" value="Donation">Donation
                        <input type="radio" id="radop" name="rbutton" value="Donation">Adoption
                        </td>
                    </tr>

例如,我无法访问 table2 中的名称。

我尝试使用下面的方法访问但失败了。

driver.findElements(By.xpath("//*[@class='table1']/tbody/tr[2]/td[2]/form/table[@class='inner_table']/tr[ 1]/td[1))

【问题讨论】:

  • table2 的 id 是 table2 所以为什么不直接使用它

标签: java html xpath selenium-webdriver


【解决方案1】:

在下面试试这个xpath

//table[@id='table2']/..//following::input[@name='name_field']

xpath 的解释:- 使用&lt;table&gt; 标签的id 属性并使用following 关键字继续使用&lt;input&gt; 标签。

上面的xpath 将找到输入名称字段文本框。

注意:-不要使用absolute xpath,而是使用relative xpath

【讨论】:

  • 你有这个答案吗?
【解决方案2】:

不建议在 selenium 上使用 xpath,因为元素可能会发生变化,如果添加其他元素,则必须重构选择器。

要回答您的问题,您可以使用 table2 的 ID 并选择所需的元素。

【讨论】:

  • 我尝试使用下面的代码,但大小返回为 0 而不是 2 int table = driver.findElements(By.xpath("//*[@class='inner_table']/tr[1 ]/td")).size(); System.out.println("表格大小为" + table);
  • 您能否建议处理这种情况的最佳方法。
  • @Vish hi - 我建议也使用类似的东西By.cssSelector("inner_table &gt; tr:nth-child(1)") 或者一旦你使用By.id("table2") 从表格中获取元素,你就可以选择第一个元素
【解决方案3】:

它应该是一个像 input[name='name_field'] 这样简单的 CSS 选择器,或者如果不够具体,请使用 #table2 input[name='name_field']

【讨论】:

    【解决方案4】:

    尝试如下所示的 xpath:

    要访问名为“name_field”的输入字段,请在 xpath 下方使用

    driver.findElement(By.xpath("//table[@id='table2' and @class= 'inner_table']//input[@type='text' and @name='name_field']")
    

    希望它会有所帮助。

    【讨论】:

      【解决方案5】:

      在 web 表格中,您可以使用 xPath 到达元素的父元素,然后找到 td 标签的 preceding-siblingfollowing-sibling

      本教程将帮助您: http://www.seleniumtests.com/2011/10/using-xpath-to-reach-parent-of-element.html

      【讨论】:

        猜你喜欢
        • 2021-06-07
        • 2014-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多