【问题标题】:How to check if extjs checkbox is selected in selenium?如何检查是否在 selenium 中选中了 extjs 复选框?
【发布时间】:2012-12-12 02:27:05
【问题描述】:

我正在测试一个在 ExtJs 中实现的 Web 应用程序(部分...),复选框实现为按钮。 使用 Selenium 库用 java 编写的测试。

为了点击按钮,我正在使用类似的东西:

selenium.click("css=input.x-form-field.x-form-checkbox",true);

现在我正在尝试获取复选框的状态,如果它被选中,我不知道该怎么做。

这里是实现:

<td id="checkboxfield-1028-bodyEl" class="x-form-item-body x-form-cb-wrap" colspan="3" role="presentation" style="width: 100%;">
<input id="checkboxfield-1028-inputEl" class="x-form-field x-form-checkbox" type="button" hidefocus="true" autocomplete="off" aria-invalid="false" style="-moz-user-select: text;">
<label id="checkboxfield-1028-boxLabelEl" class="x-form-cb-label x-form-cb-label-after" for="checkboxfield-1028-inputEl">Active</label>

谢谢

【问题讨论】:

    标签: java extjs selenium checkbox


    【解决方案1】:

    您可以尝试使用部分 id 来查找复选框:

    driver.findElement(By.xpath("//input[contains(@id, 'checkboxfield')]")).isSelected();
    

    【讨论】:

    • 谢谢,但我不能在我的情况下使用 xpath。我尝试使用 CSS 选择器:driver.findElement(By.cssSelector("input.x-form-field.x- form-checkbox[type=\"button\"]")).isSelected(); 但是,它说:失败:返回的节点不是 HTML 元素。请告知,您可以在第一条消息中找到实现。
    【解决方案2】:

    我不完全记得 ExtJs,但我假设选中和未选中是两个 css 类。尝试找出这些类(使用 Chrome 开发工具检查页面)。

    在页面对象上定义两个 WebElement:

    @FindBy(cssSelector=".x-form-checkbox.unchecked")
    WebElement checked;
    
    @FindBy(cssSelector=".x-form-checkbox.checked")
    WebElement unchecked;
    

    然后你需要等到按钮被选中或取消选中。这可以通过添加这个方法来完成:

    protected final void waitForElementPresent(final By by) {
       seleniumContext.getWebDriverWait().until(new ExpectedCondition() {
          @Override
          public Boolean apply(WebDriver driver) {
            try {
              driver.findElement(by);
              return true;
            } catch (NoSuchElementException e) {
              return false;
            }
          }
       });
    }
    

    【讨论】:

    • 感谢您的回答,问题是我没有这两个类:x-form-checkbox.unchecked 和 x-form-checkbox.checked。请检查问题中的实现部分以查看我拥有的类。
    【解决方案3】:

    我假设您使用的是网络驱动程序,所以您可以做的是:

     isChecked = e.findElement(By.tagName("input")).Selected;
    

     isChecked = e.findElement(By.Id("checkboxfield-1028-bodyEl")).Selected;
    

    这给了你状态。

    您是否正在为其寻找 JUnit 断言?

    【讨论】:

    • ExtJs 正在生成随机 id,所以第二个解决方案不起作用。
    • 实际上我直到现在才使用 webdriver(已经以这种方式制作了自动化项目),试图从那时起将它应用到我的工作中。我正在尝试做:driver.findElement(By.cssSelector("input.x-form-field.x- form-checkbox[type=\"button\"]")).isSelected(); 但是,它说:失败:返回的节点不是 HTML 元素请告知,您可以在第一条消息中找到实现。
    • 通过 ID 查找内容比通过 css 选择器更容易,因为您可以将相同的 css 类应用于多个元素。我建议进入并给项目一个 ID,然后通过 ID 找到一个元素。
    猜你喜欢
    • 2013-01-04
    • 2012-09-21
    • 2018-07-20
    • 2013-12-25
    • 2010-10-28
    相关资源
    最近更新 更多