【问题标题】:Selenium wont click the first checkbox on the pageSelenium 不会单击页面上的第一个复选框
【发布时间】:2016-04-12 00:14:15
【问题描述】:

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

我的问题是我要求 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>

【问题讨论】:

  • 你能分享HTML片段吗,如果你注释掉第二个会发生什么,第一个被选中了吗? .. 你确定它是checkbox 而不是radioButton
  • 您能否编辑您的问题并为两个复选框添加完整的 html。
  • 它在我的机器上工作正常,使用你的代码,两个文本框都被选中。 Here
  • 您使用的是哪个浏览器,我已经在 firefox 上尝试过,它的运行非常好。 Screenshot
  • 标签: java selenium testing automation automated-tests


    【解决方案1】:

    在四处寻找之后,我始终无法弄清楚为什么会发生这种情况,但最终我确实找到了一个解决方法,我会为了任何路过的人而发布。

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

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

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签