java - Selenium 不会单击页面上的第一个复选框

标签 java selenium testing automation automated-tests

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

我的问题是我要求 Selenium 先点击哪个复选框被忽略了。不管我把它们放在什么顺序,它在代码中出现的第一个都不会被点击,但反过来测试也不会失败,所以我知道 Selenium 至少找到了它,并认为它被点击了。

这是复选框的 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();

遇到了同样的问题。然后我还尝试将它们包装在“if”语句中以首先检查元素的状态,如果未选中则单击它:

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>

最佳答案

在四处寻找之后,我一直没能找出发生这种情况的原因,但我最终还是找到了一个解决方法,我会为了任何路过的人而发布它。

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

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

关于java - Selenium 不会单击页面上的第一个复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34657970/

相关文章:

java - H2 - 使用索引号更新每行(0,1,2,3,..)

java - Android地理围栏广播接收器未触发

java - 如何使用java水平滚动窗口内的滚动条

java - 测试在 IDE 中通过,在命令行中失败

testing - 软件:质量保证VS质量科学?

java - Android inputType ="numberDecimal"调出没有逗号的键盘

java - 将我的 java 函数绑定(bind)到 saxon XSLT 处理器

asp.net-mvc-4 - 您如何在 Selenium WebDriver 的操作之间暂停

java - 如何找到包含特定文本的第二张图像

javascript - Selenium 可以用于测试单页 JavaScript 应用程序吗?