【发布时间】:2020-10-18 06:24:45
【问题描述】:
我很难确定是否选择了单选选项 No 或未使用 Selenium Java。下面是网页上单选选项的截图。
这是原始的 HTML 代码。由于它缺少伪元素,我还附上了它的屏幕截图。
<div id="ButtonOptions" class="sample prop_group">
<label class="vdl-radio">
<input id="radio_K371FCY2UbrpgcP3RE6VC" type="radio" class="vdl-radio__input" tabindex="0" aria-disabled="false" value="true">
<label for="radio_K371FCY2UbrpgcP3RE6VC">Yes</label>
</label>
<label class="vdl-radio">
<input id="radio_4XLAugQMgEwzm3e2quk5y" type="radio" class="vdl-radio__input" tabindex="0" aria-disabled="false" value="false" checked="">
<label for="radio_4XLAugQMgEwzm3e2quk5y">No</label>
</label>
</div>
下面是 HTML 代码的屏幕截图,其中包含伪元素 ::after(在下面突出显示)在未选择选项时动态加载。
我在执行 JavaScript 的 Java 方法下创建了我希望返回整个 label for 标记的方法。它目前正在打印出null。但是,当我在 Chrome 浏览器控制台中执行下面使用的脚本时,它会识别整个标签标签,包括 ::before 和 ::after 伪元素。
public String whichRadioOptionIsSelected(){
String tag = "";
List<WebElement> radioOptions = findElementsByXpath(".//div[@id='ButtonOptions']/label");
//Iterate thru both radio options and execute the JavaScript.
for(int i = 1; i <= radioOptions.size(); i++) {
String script = "return document.querySelector('div#ButtonOptions > label:nth-of-type("+i+") label', null);";
JavascriptExecutor js = (JavascriptExecutor) driver;
tag = (String) js.executeScript(script);
System.out.println(tag);
}
return tag;
}
}
【问题讨论】:
-
请阅读为什么是screenshot of HTML or code or error is a bad idea。考虑使用基于格式化文本的相关 HTML、代码试验和错误堆栈跟踪来更新问题。
-
Hello @DebanjanB - 我在描述中添加了原始 HTML 代码。我仍然想保留 HTML 代码的屏幕截图,因为有伪元素 ::before 和 ::after。从浏览器 devtools 复制元素不会复制它们,因为您可以看到原始 HTML 代码中缺少它们。
-
你确定你需要伪元素吗?你不能只选择输入元素并检查'checked'属性吗?
-
嗨@jameslafferty - 'checked' 属性的问题是它仅适用于无单选选项。当我单击是单选选项时,
input标记中未填充“已检查”属性。所以不靠谱。 -
噢!我忘记了...在更改时,它是已检查的属性,而不是您想要的已检查属性。但是... Selenium 还提供了一个 isSelected 方法,您可以使用它来检查输入是否被选中。
标签: java selenium selenium-webdriver xpath pseudo-element