繁体   English   中英

如何使用 Selenium 和 Java 识别是否选择了带有伪元素::after 样式的单选按钮选项

[英]How to identify if a radio button option styled with pseudo element ::after is selected or not using Selenium and Java

我很难确定是否使用 Selenium Java 选择了无线电选项 No。 下面是 web 页面上的无线电选项的屏幕截图。

在此处输入图像描述

这是原始的 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 代码的屏幕截图,该代码具有伪 element::after(在下面突出显示)在未选择选项时动态加载。

在此处输入图像描述

我在 Java 方法下创建了执行 JavaScript 的方法,我希望返回整个label for标签。 它目前正在打印null 但是,当我在 Chrome 浏览器控制台中执行下面使用的脚本时,它会识别整个 label 标记,包括::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;
    }
}

要验证是否选择了文本为No 定位器策略

  • 使用前面的

     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"); }

参考

您可以在以下位置找到关于伪元素的详细讨论:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM