0

我目前正在使用 java/selenium webdriver 自动化。但是我被困在这个特定的部分,我无法让 webdriver 根据一个值单击复选框。

driver.findElement(By.xpath("//input[@class='chkPopupCod']/following::td[contains(text(),'BBB')]")).click();

当我没有使用 xpath 的 Axes 部分时它可以工作,但是它只能选择第一个复选框

下面是html的一个片段

<tr class="even">
<td style="width: 20px;">
<input class="chkPopupCod" type="checkbox">codData=Object { id=101914, codId=101906, label="AAA", more...}
</td>
<td class="" align="left">AAA</td>
</tr>
<tr class="odd">
<td style="width: 20px;">
<input class="chkPopupCod" type="checkbox" style="background-color: rgb(255, 255, 255);">codData=Object { id=101918, codId=101907, label="BBB", more...}
</td>
<td class="" align="left" style="background-color: transparent;">BBB</td>
</tr>
<tr class="even">
<td style="width: 20px;">
<input class="chkPopupCod" type="checkbox">codData=Object { id=101922, codId=101908,   label="CCC", more...}
</td>
<td class="" align="left">CCC</td>
</tr>
4

3 回答 3

2

您在 XPath 中有正确的想法。只需翻转它:

//td[contains(text(),'BBB')]/preceding::td/input[@class='chkPopupCod']

如,首先获取其中包含文本的元素。在那之后穿过树。

于 2013-10-07T09:36:03.180 回答
0

在处理表格时,我总是喜欢首先确定我正在处理的表格行。为此,我有一种方法可以将表格行返回给我,然后我从那里开始寻找我希望使用的元素。

示例:获取父表行的方法 -

    public void IWebElement GetParentTableRow(IWebElement element)
    {
        while (!element.TagName.ToLower().Equals("tr"))
        {
            try
            {
                element = element.FindElement(By.XPath("..")); //Returns the parent
            }
            catch
            {
                return null;
            }
        }

        return element;
    }

用法 -

public void Test()
{
   IWebElement tableRow = GetParentTableRow(driver.FindElement(By.XPath("//td[contains(text(),'BBB')]"));
   tableRow.FindElement(By.ClassName("chkPopupCod")).Click();
}

希望能帮助到你。:)

于 2013-10-07T10:03:26.360 回答
0

虽然最初的问题与 WebDriver 的 Java 版本有关,但如果有人阅读这篇文章是在 .NET 中工作,那么有一个名为 TableDriver ( https://github.com/jkindwall/TableDriver.NET ) 的扩展可以帮助解决诸如这个。最初的问题没有显示表格的完整 html,所以我不能确定它会如何应用,但你应该能够做这样的事情:

Table table = Table.Create(driver.FindElement(By.Id("tableId")));
table.FindCell("\1=BBB", 0).Element.Click();

更新

TableDriver.Java 现在可用。详情在这里:https ://github.com/jkindwall/TableDriver.Java

于 2021-02-25T21:23:31.533 回答