根据同一行中另一个元素的条件,单击表中的元素

时间:2015-01-13 22:14:01

标签: java python selenium

对于我正在查看的表格,我有以下示例结构:

<tbody>
    <tr class="OddRow">
        <td class="TimeField">
        7:20 AM
        </td>
        <td class="TextField"></td>
        <td id="Price_2_1" class="MoneyField"></td>
        <td class="LinkField">
            <a id="basketControl_2_1" class="sr_AddToBasket">
                Add to Basket
            </a>
        </td>
    </tr>
    <tr class="EvenRow">
        <td class="TimeField"></td>
        <td class="TextField"></td>
        <td id="Price_2_2" class="MoneyField"></td>
        <td class="LinkField"></td>
    </tr>
    ...OddRow
    ...EvenRow
</tbody>

我希望能够做的是点击(使用selenium)元素&#34; sr_AddToBasket&#34;当类#34; TimeField&#34;是我指定的东西。表中只有一行可以在特定实例中具有指定的时间。

我真的不知道如何解决这个问题,所以任何帮助都将不胜感激!如果它有助于我现在在python中尝试这个,但是对java有一些了解。

3 个答案:

答案 0 :(得分:2)

假设在添加两行之后,您的结构如下所示:

<table>
<tbody>
    <tr class="OddRow">
        <td class="TimeField">
        7:20 AM
        </td>
        <td class="TextField"></td>
        <td id="Price_2_1" class="MoneyField"></td>
        <td class="LinkField">
            <a id="basketControl_2_1" class="sr_AddToBasket">
                Add to Basket
            </a>
        </td>
    </tr>
    <tr class="EvenRow">
        <td class="TimeField"></td>
        <td class="TextField"></td>
        <td id="Price_2_2" class="MoneyField"></td>
        <td class="LinkField"></td>
    </tr>

    <tr class="OddRow">
        <td class="TimeField"></td>
        <td class="TextField"></td>
        <td id="Price_2_1" class="MoneyField"></td>
        <td class="LinkField"></td>
    </tr>
    <tr class="EvenRow">
        <td class="TimeField">
        9:00 PM
        </td>
        <td class="TextField"></td>
        <td id="Price_2_2" class="MoneyField"></td>
        <td class="LinkField">
            <a id="basketControl_2_1" class="sr_AddToBasket">
                Add to Basket
            </a>
        </td>
    </tr>
</tbody>
</table>

所以,现在说你想点击第二个链接,然后请使用下面的Java代码

driver.findElement(By.xpath("//td[@class='TimeField' and contains(text(),'9:00 PM')]/following-sibling::td/a[@class='sr_AddToBasket']")).click();

您可以将上面的“9:00 PM”替换为您的值。

答案 1 :(得分:0)

if driver.find_elements_by_css_xpath("//tr[@class='EvenRow']/td[@class='TimeField']").get_attribute("value")=="your value":
            driver.find_element_by_xpath("//a[@class='sr_AddToBasket']").click()

get_attribute应该返回您设置的值,简单if条件符合执行条件。然后,您会找到所需的链接并单击。我使用xpath,因为它有助于我们轻松识别表格中的元素。

答案 2 :(得分:0)

您可以使用以下内容: 这个问题在http://patch-recepteur.blogspot.com/2017/04/forum-clicking-element-in-table-based.html

回答了
<table>
<tbody>
    <tr class="OddRow">
        <td class="TimeField">
        7:20 AM
        </td>
        <td class="TextField"></td>
        <td id="Price_2_1" class="MoneyField"></td>
        <td class="LinkField">
            <a id="basketControl_2_1" class="sr_AddToBasket">
                Add to Basket
            </a>
        </td>
    </tr>
    <tr class="EvenRow">
        <td class="TimeField"></td>
        <td class="TextField"></td>
        <td id="Price_2_2" class="MoneyField"></td>
        <td class="LinkField"></td>
    </tr>

    <tr class="OddRow">
        <td class="TimeField"></td>
        <td class="TextField"></td>
        <td id="Price_2_1" class="MoneyField"></td>
        <td class="LinkField"></td>
    </tr>
    <tr class="EvenRow">
        <td class="TimeField">
        9:00 PM
        </td>
        <td class="TextField"></td>
        <td id="Price_2_2" class="MoneyField"></td>
        <td class="LinkField">
            <a id="basketControl_2_1" class="sr_AddToBasket">
                Add to Basket
            </a>
        </td>
    </tr>
</tbody>
</table>