画面に多くのラジオボタンがあります。ラジオボタンが選択されると、属性がチェックされます。ラジオボタンが選択されていない場合、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">
Checked属性が存在しない場合にテストを通過させたい
適切に処理するメソッドを作成できます。これは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
残念ながら、報告されたケースでは、受け入れられた回答は無効です。 CrおよびFFの何らかの理由で、存在しない属性はnullではなく空の文字列を返します。リンクされている問題: https://github.com/SeleniumHQ/Selenium/issues/2525
見て ここ :
getAttribute(Java.lang.String name)
戻り値:属性の現在の値、または値が設定されていない場合はnull.
使用しているテストフレームワークを使用して、値がnullであることをアサートします
Assert.IsNull(getSingleElement(XXX).getAttribute( "checked"));
ラジオボタンが選択されていることをアサートするため
Assert.assertTrue(element.isSelected());
ラジオボタンが選択されていないことをアサートするため
Assert.assertFalse(element.isSelected());
属性が要素に存在することをアサートするため
Assert.assertEquals(element.getAttribute(attributeName), expectedAttributeValue);
属性checkedの後に属性値が続かない場合があるため、チェックボックスが扱いにくい場合があります。
属性の存在のみに関心がある場合、簡単なチェックは次のようになります。
boolean hasAttr_css = driver.findElementsByCssSelector("#input_id[checked]").isEmpty();
try {
if (webdriver.findElement(By.identificationMethod(value)).getAttribute(value) != null) {
passed = false;
}
} catch (Exception e) {
passed = true;
}
要素の存在を確認する必要があるときに使用した種類のソリューションでしたが、NullPointerエラーはNoSuchElement例外によってキャッチされなかったことに注意する必要があります。