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

Java Selenium不会单击页面上的第一个复选框,java,selenium,testing,automation,automated-tests,Java,Selenium,Testing,Automation,Automated Tests,我正在测试一个网页,我需要选择几个复选框,然后单击提交 我的问题是,我要求Selenium首先单击的复选框被忽略了。不管我把它们放在什么顺序,它在代码中出现的第一个不会被点击,但反过来测试不会失败,所以我知道Selenium至少找到了它,并且认为它被点击了 以下是复选框的HTML: <ul class="input"> <li class="expandable"> <span class="expand-link collapsed" title="Click t

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

我的问题是,我要求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="">
每次单击第二个元素而不是第一个元素时。然后,我在它前面添加了一个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);
    

    在四处打猎之后,我一直没能找到发生这种情况的原因,但我最终还是找到了一份工作,为了路过的人,我将发布这份工作

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

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

    你能分享
    HTML
    代码段吗?如果你注释掉第二个代码段,会发生什么?第一个代码段被选中了吗。。您确定这是一个
    复选框而不是
    单选按钮
  • 一些文本您可以编辑您的问题并为两个复选框输入完整的html。在我的机器上,使用您的代码,两个文本框都被选中了。你使用哪种浏览器,我已经在firefox上试用过了,它工作得非常好。你能分享
    HTML
    代码段吗?如果你注释掉第二个代码段,会发生什么?第一个代码段被选中了吗。。您确定这是一个
    复选框而不是
    单选按钮
  • 一些文本您可以编辑您的问题并为两个复选框输入完整的html。在我的机器上,使用您的代码,两个文本框都被选中了。你使用哪种浏览器,我已经在firefox上试用过了,它工作得非常好。