如何根据表格第二列中的值设置第一列中的复选框?

时间:2013-04-03 11:37:04

标签: java selenium browser-automation

我正在使用Java和Selenium自动执行任务。

我想根据第二列中的值是否与我的输入值匹配来设置一个复选框(位于表的第一列)。例如,在以下代码段中,值“Magnus”与我的输入值匹配,因此我想设置与之关联的复选框。

<table class="cuesTableBg" width="100%" cellspacing="0" border="0" summary="Find List Table Result">
    <tbody>
        <tr class="cuesTableBg">
        <tr class="cuesTableRowEven">
        <tr class="cuesTableRowOdd">
            <td align="center">
                <input class="content-nogroove" type="checkbox" name="result[1].chked" value="true">
                <input type="hidden" value="1c62dd7a-097a-d318-df13-75de31f54cb9" name="result[1].col[0].stringVal">
                <input type="hidden" value="Magnus" name="result[1].col[1].stringVal">
            </td>
            <td align="left">
                <a class="cuesTextLink" href="userEdit.do?key=1c62dd7a-097a-d318-df13-75de31f54cb9">Magnus</a>
            </td>
            <td align="left"></td>
            <td align="left">Carlsen</td>
            <td align="left"></td>
        </tr>
        <tr class="cuesTableRowEven">
    </tbody>
</table>

但我无法做到。在上面的例子中,以下两行用于此目的(因为我的输入值与第二行中的输入值匹配):

WebElement checkbox = driver.findElement(By.xpath("//input[@type = 'checkbox' and @name = 'result[1].chked']"));
checkbox.click();

但它无法使用,因为所需的值可能并不总是在第二行。

我尝试使用代码块,但无济于事:

List<WebElement> rows = driver.findElements(By.xpath("//table[@summary = 'Find List Table Result']//tr"));
for (WebElement row : rows) {
    WebElement userID = row.findElement(By.xpath(".//td[1]"));
    if(userID.getText() == "Magnus") {
        WebElement checkbox = row.findElement(By.xpath(".//input[@type = 'checkbox']"));
        checkbox.click();
        break;
    }
}

对于它的价值,第二栏中的文本的XPath:

/html/body[@id='mainbody']/table/tbody/tr/td/div[@id='contentautoscroll']/form/table[2]/tbody/tr[3]/td[2]/a

我不知道CSS Selectors。这会有帮助吗?

3 个答案:

答案 0 :(得分:1)

如果您已经知道输入值,则只需使用xpath下方选择所需的复选框

"//a[text(),'Magnus']/parent::td/preceding-sibling::td/input[@type='checkbox']"

更新

"//a[text()='Magnus']/parent::td/preceding-sibling::td/input[@type='checkbox']"

答案 1 :(得分:0)

在比较两个字符串equals时,应使用==

替换

 if(userID.getText() == "Magnus")

String check1 = userID.getText();
if(check1.equals("Magnus")

答案 2 :(得分:0)

似乎这对我来说是一个愚蠢的错误。以下代码片段非常简单,可以使用。

List<WebElement> rows = driver.findElements(By.xpath("//table[@class='cuesTableBg']//tr"));

for (WebElement row : rows) {
    WebElement secondColumn = row.findElement(By.xpath(".//td[2]"));
    if(secondColumn.getText().equals("Magnus")) {
        WebElement checkbox = row.findElement(By.xpath(".//td[1]/input"));
        checkbox.click();
        break;      
    }   
}