我的屏幕上有很多单选按钮。选择单选按钮时,它具有已检查的属性。未选择单选按钮时,不存在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属性不存在时传递测试
答案 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) 方案