如何确定是否使用Selenium和Java选择了使用pseudo-element::after样式的单选按钮选项
我很难确定是否选择了单选选项No或是否使用Selenium Java。以下是网页上的广播选项截图 这是原始的HTML代码。因为它缺少伪元素,所以我也附上了它的截图如何确定是否使用Selenium和Java选择了使用pseudo-element::after样式的单选按钮选项,java,selenium,selenium-webdriver,xpath,pseudo-element,radiobutton,Java,Selenium,Selenium Webdriver,Xpath,Pseudo Element,Radiobutton,我很难确定是否选择了单选选项No或是否使用Selenium Java。以下是网页上的广播选项截图 这是原始的HTML代码。因为它缺少伪元素,所以我也附上了它的截图 对 不 下面是HTML代码的屏幕截图,该代码在未选择任何选项时动态加载pseudo element::after(下面突出显示) 我在下面创建了一个Java方法,该方法执行JavaScript,我希望为标记返回整个标签。它当前正在打印出null。但是,当我在Chrome浏览器控制台中执行下面使用的脚本时,它会标识整个标签标记,
对
不
下面是HTML代码的屏幕截图,该代码在未选择任何选项时动态加载pseudo element::after(下面突出显示)
我在下面创建了一个Java方法,该方法执行JavaScript,我希望为标记返回整个标签。它当前正在打印出null
。但是,当我在Chrome浏览器控制台中执行下面使用的脚本时,它会标识整个标签标记,包括:之前和::之后的伪元素
选择了Radioption()的公共字符串{
字符串标签=”;
List radioOptions=findElementsByXpath(“../div[@id='ButtonOptions']/label”);
//迭代两个单选选项并执行JavaScript。
对于(int i=1;i要验证是否选择了文本为No的选项,您可以使用以下基于:
- 使用前面的:
- 使用前面的兄弟姐妹:
参考文献
有关伪元素的详细讨论,请参见:
请阅读为什么A。考虑用格式化的基于文本的相关HTML、代码试验和错误堆栈跟踪更新问题。Hello @ DEBANJANB-我在描述中添加了原始HTML代码。我仍然希望保留HTML代码的截图,因为它具有伪元素::不复制它们,正如您在原始HTML代码中看到的那样。您确定需要伪元素吗?您不能只选择输入元素并检查“checked”属性吗?Hi@jameslafferty-checked属性的问题是,它只适用于No单选选项。当我单击Yes单选选项时,“checked”属性不可用填充在input
标记中。因此它不可靠。Doh!我忘记了…在更改时,您需要的是checked属性,而不是checked属性。但是…Selenium还提供了一个isSelected方法,您可以使用它来检查输入是否被选中。这是一个非常有趣且信息丰富的答案(因此是向上投票)。不过,我确实想知道OP是否应该使用不同的方法来确定单选按钮是否被选中。这样做对我来说似乎很可疑(尽管在某些情况下,可能只有这样做才是唯一的选择).我遗漏了什么吗?或者你觉得这也对吗?@jameslafferty很棒,实际上有一个方法isSelected()
正如您在评论中提到的,这不是很有效/可靠。但是我正在等待OP带着观察结果回来。他的要求可能会通过这个逻辑确定下来。您好@DebanjanB-谢谢。我确实考虑了您在上面提出的解决方案。问题是,验证是否选择了“是”选项是有问题的ng困难。选中的
属性没有为其填充,因此无法在xpath中使用。选择“是”时发生的唯一变化是:::在
标记的标签中添加了
伪元素之后。我确实理解我最初的问题是关于“否”选项。@skota pseudo element ar仅e样式属性,对元素标识的影响最小。如果您对“是”选项有问题,请随时提出新的问题和新的要求。我也很乐意回答。@DebanjanB-是。我用前面的尝试了您的解决方案,但没有任何选项。我可以为您单独发布一个问题是的,选择。
try {
driver.findElement(By.xpath("//div[@id='ButtonOptions']//label[@class='vdl-radio']//label[text()='No']//preceding::input[@checked]"));
System.out.println("No option is selected");
}
catch(NoSuchElementException e) {
System.out.println("No option isn't selected");
}
try {
driver.findElement(By.xpath("//div[@id='ButtonOptions']//label[@class='vdl-radio']//label[text()='No']//preceding-sibling::input[@checked]"));
System.out.println("No option is selected");
}
catch(NoSuchElementException e) {
System.out.println("No option isn't selected");
}