簡體   English   中英

Selenium webdriver - 單擊基於表值的復選框

[英]Selenium webdriver - clicking on checkbox based on table value

我目前正在工作 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>

您在 XPath 中有正確的想法。 只需翻轉它:

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

如,拿到第一個具有里面的文本元素。 之后穿過樹。

在處理表格時,我總是喜歡首先確定我正在處理的表格行。 為此,我有一種方法可以返回表格行,然后從那里開始尋找我希望使用的元素。

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

    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();
}

希望它有幫助。 :)

盡管最初的問題與 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM