Selenium不会点击页面上的第一个复选框

时间:2016-01-07 14:44:42

标签: java selenium testing automation automated-tests

我正在测试一个网页,我需要选中几个复选框,然后点击提交。

我的问题是我要求Selenium首先点击的复选框被忽略。无论我把它们放在哪个顺序,它在代码中出现的第一个单元都不会被点击,但相反,测试不会失败,所以我知道Selenium至少找到了它,并认为它和#39;点击它。

这是复选框的HTML:

<ul class="input">
<li class="expandable">
<span class="expand-link collapsed" title="Click to collapse"></span>
<input type="checkbox" id="g1:1" name="g1" value="1">
<label for="g1:1">Some text</label>
<ul class="">

<ul class="input">
<li class="expandable">
<span class="expand-link collapsed" title="Click to collapse"></span>
<input type="checkbox" id="g2:1" name="g2" value="1">
<label for="g2:1">Some text</label>
<ul class="">

我从这开始:

driver.findElement(By.id("g1:1")).click();
driver.findElement(By.id("g2:1")).click();

每次点击第二个元素但不是第一个元素。然后我在它之前添加了一个WebDriverWait,以防它与之相关,如下所示:

WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.id("g1:1"))));

driver.findElement(By.id("g1:1")).click();
driver.findElement(By.id("g2:1")).click();

哪个有同样的问题。然后我还尝试将它们包装在&#39; if&#39;首先检查元素状态的声明,如果未选中则单击它:

WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.id("g1:1"))));

    if ( !driver.findElement(By.id("g1:1")).isSelected() ) {
        driver.findElement(By.id("g1:1")).click();
    }

    if ( !driver.findElement(By.id("g2:1")).isSelected() ) {
        driver.findElement(By.id("g2:1")).click();
    }

这些都没有帮助。如果我将第一个复选框注释掉问题,那么简单就会移到第二个复选框。

我缺少什么想法?

HTML代码段

<li class="expandable"> 
<span class="expand-link collapsed" title="Click to collapse"></span> 
<input type="checkbox" id="g1:1" name="g1" value="1"> 
    <label for="g1:1">Some text</label>
</input>

1 个答案:

答案 0 :(得分:0)

经过一番狩猎之后,我从来没有设法找出原因,但我确实为了任何人的过去而最终解决了这个问题。

通过使用Selenium执行特定JavaScript的能力,我能够以这种方式检查复选框。请记住,我没有删除上面的代码,因为它总是会失败第一个复选框,无论它是什么。无论如何,这是我为解决问题而添加的代码:

    WebElement firstcheckbox = driver.findElement(By.id("someID"));            
    JavascriptExecutor executor = (JavascriptExecutor) driver;
    executor.executeScript("jQuery(document.getElementById('someID')).prop('checked', true)", firstcheckbox);