css - 无法在 Selenium 中使用 CSS 选择器选择同级

标签 css selenium selenium-webdriver css-selectors automated-tests

当尝试使用 CSS 选择器单击下一个同级元素时,Selenium WebDriver 会抛出 InvalidSelectorException。

考虑我的 DOM 看起来像这样:

<div class="checkbox-group">
   <div>     
       <span class="checkbox">::after</span> <!--click on this span makes the checkbox checked-->
       <span class="checkbox-name">Male</span> <!--click on this span doesn't make the checkbox checked-->
   </div>
   <div>
      <span class="checkbox">::after</span>
      <span class="checkbox-name">Female</span>
   </div>
</div>

我的 Java 代码是:

@FindAll(@FindBy(css=".checkbox-name"))
List<WebElement> checkboxes;

public void selectCheckbox(String value){
    for(WebElement checkbox : checkboxes){
        String text = checkbox.getText();
        if(text.equalsIgnoreCase(value)){
            WebElement control = checkbox.findElement(By.cssSelector("+.checkbox"));//Exception thrown here     
            control.click();
        }
    }
}

抛出异常:

org.openqa.selenium.InvalidSelectorException: invalid selector: An invalid or illegal selector was specified. 
** Element info: {Using=css selector, value=+.checkbox} 

最佳答案

而不是按类获取元素checkbox-name并检查它是否包含 String value ,您可以使用 text 直接获取该元素在 xpath 中。
找到该元素后,您可以使用 following-sibling在 xpath 中访问 span这是可点击的。

您可以仅在一个 xpath 中完成所有这些操作,例如:

public void selectCheckbox(String value){
    WebElement checkBox = driver.findElement(By.xpath("//div[@class='checkbox-group']//span[text()="+value+"]//following-sibling::span"));
    checkBox.click();
}

关于css - 无法在 Selenium 中使用 CSS 选择器选择同级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60678534/

相关文章:

css 在 asp.net 中的 contentPlaceHolder 的 div 中不起作用

python - Selenium (Python) - 在运行时更改代理?

java - 如何通过selenium读取UL类弹出窗口上显示的文本

python - Selenium - 等待元素出现、可见且可交互

html - 每个浏览器的媒体查询

javascript - 仅在 IE 中无法将转换添加到 Angular 指令中的样式

jquery - 如何修复对话框按钮的单个 css 样式?

python - 使用 python/selenium 样式化类元素

selenium - 获取 td 标签内 div 的 xpath

javascript - Protractor 改变元素的大小