如何使用Selenium WebDriver验证元素中是否存在属性?

时间:2013-12-17 21:25:52

标签: java selenium selenium-webdriver webdriver

我的屏幕上有很多单选按钮。选择单选按钮时,它具有已检查的属性。未选择单选按钮时,不存在checked属性。我想创建一个方法,如果该元素不存在,它将通过。

我正在使用selenium webdriver和java。我知道我可以使用getSingleElement(XXX).getAttribute(XXX)检索属性。我只是不确定如何验证属性不存在,以及测试在不存在时传递(如果确实存在则失败)。

选中单选按钮时

<input id="ctl00_cphMainContent_ctl00_iq1_response_0" type="radio" name="ctl00$cphMainContent$ctl00$iq1$response" value="1" checked="checked"> 

未选中单选按钮时

<input id="ctl00_cphMainContent_ctl00_iq1_response_0" type="radio" name="ctl00$cphMainContent$ctl00$iq1$response" value="1">

我希望在check属性不存在时传递测试

7 个答案:

答案 0 :(得分:19)

您可以创建一个正确处理它的方法。请注意以下是C#/ Java混合风格,需要稍微调整一下才能编译。

private boolean isAttribtuePresent(WebElement element, String attribute) {
    Boolean result = false;
    try {
        String value = element.getAttribute(attribute);
        if (value != null){
            result = true;
        }
    } catch (Exception e) {}

    return result;
}

如何使用它:

WebElement input = driver.findElement(By.cssSelector("input[name*='response']"));
Boolean checked = isAttribtuePresent(input, "checked");
// do your assertion here

答案 1 :(得分:4)

here

getAttribute(java.lang.String name)

<强>返回: 属性的当前值,如果未设置该值,则为null。

使用您正在使用的任何测试框架断言值为null

  

Assert.IsNull(getSingleElement(XXX).getAttribute( “检查”));

答案 2 :(得分:4)

不幸的是,在报告的案例中,接受的答案无效。 由于某种原因,Cr和FF不存在的属性返回空字符串而不是null。 问题已关联:https://github.com/SeleniumHQ/selenium/issues/2525

答案 3 :(得分:2)

选择断言单选按钮

Assert.assertTrue(element.isSelected());

未选中断言单选按钮

Assert.assertFalse(element.isSelected());

对于断言属性存在于元素

Assert.assertEquals(element.getAttribute(attributeName), expectedAttributeValue);

答案 4 :(得分:1)

复选框有时会很棘手,因为已检查属性可能后面没有属性值。

如果您只关心属性的存在,那么简单的检查将如下所示:

 boolean hasAttr_css = driver.findElementsByCssSelector("#input_id[checked]").isEmpty();

答案 5 :(得分:0)

try { 
if (webdriver.findElement(By.identificationMethod(value)).getAttribute(value) != null) {
       passed = false;
    }
} catch (Exception e) {
    passed = true;
}

当我需要检查元素存在时使用的是那种解决方案,但是必须注意NullPointer错误没有被NoSuchElement异常捕获。

答案 6 :(得分:0)

因为没有一个答案对我有帮助,所以我想分享我最后采用的非常简单的解决方案:

$request->session()->regenerate();

希望对大家有所帮助。我将它用于 wait.until(condition) 方案

相关问题