无法使用selenium单击<label for =“chk”>标记内的复选框

时间:2016-12-15 10:51:23

标签: java selenium checkbox html-table vue.js

我正在尝试点击数据单元格td中的复选框,但每次我收到:

  

org.openqa.selenium.ElementNotVisibleException

例外, 问题是元素已启用但不可见。

以下是页面来源:

var doneCalculations = {};
for (var x = 1; x <= 10; x++) {
    for (var i = 1; i <= 10; i++) {;
        if (doneCalculations[i+'x'+x]) continue;
        doneCalculations[x+'x'+i] = true;
        var result = x * i;
        console.log(x + ' * ' + i + ' = ' + result);
    }
}

但是在代码下面工作并返回。

<table id='table1'>
    <thead></thead>
    <tbody>
        <tr>
            <td>
            <input id='id1' class='class' type='checkbox'>
            <label for='chk1'>
            :: before
            </label>
            </td>
        </tr>
        <tr>
            <td>
            <input id='id2' class='class' type='checkbox'>
            <label for='chk2'>
            :: before
            </label>
            </td>
        </tr>
        <tr>
            <td>
            <input id='id3' class='class' type='checkbox'>
            <label for='chk3'>
            :: before
            </label>
        </td>
        </tr>
    </tbody>
</table>

手动复选框可见且能够选择,但IsDisplayed为false,并且抛出元素不可见异常。

尝试了以下所有方法,但一切都失败了。定位器很好。

定位器:

System.out.println("isDisplayed()"+ td_lblcollection.get(0).isDisplayed()); --> False
System.out.println("isEnabled()"+td_lblcollection.get(0).isEnabled()); --> True
System.out.println("isSelected()"+td_lblcollection.get(0).isSelected()); --> False

方法1:表中的循环

@FindBy(xpath = "//*[@id='table1']/tbody/tr")
List<WebElement> tblLookupSites;

方法2:表中的循环

for (WebElement trElement : tblLookupSites) {
    List<WebElement> td_collection = trElement.findElements(By.xpath("td"));
for (WebElement tdElement : td_collection) {
    List<WebElement> td_lblcollection =tdElement.findElements(By.xpath("label"));
    td_lblcollection.get(0).click();
}
}  

方法3:表中的循环

for (WebElement trElement : tblLookupSites) {
    List<WebElement> td_collection = trElement.findElements(By.xpath("td"));
for (WebElement tdElement : td_collection) {
    List<WebElement> td_lblcollection =tdElement.findElements(By.xpath("input"));
    td_lblcollection.get(0).click();
}
}  

请建议如何点击此复选框。

使用vue.js创建UI。

2 个答案:

答案 0 :(得分:1)

使用以下内容。

driver.findElement(By.xpath(&#34; // * [@ id中=&#39; ID1&#39;]&#34))点击();

答案 1 :(得分:0)

尝试使用JavascriptExecutor界面点击不可见元素,方法是这样注入一些javascript -

WebElement element = driver.findElement(By.xpath("//input[@id='id1']"));
JavascriptExecutor js =(JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", element);

如果它有效,也可以尝试替代方式 - (这在我的项目中使用相同类型的结构) -

driver.findElement(By.xpath("//label[@for='chk1']")).click();