当前位置: 首页 > 知识库问答 >
问题:

Selenium WebDriver从CSS属性“content”获取文本,该属性位于::before伪元素上

单于正业
2023-03-14

我试图验证文本“提供的信息无效或不完整”在Java中使用Selenium/WebDriver显示。

我有以下HTML:

<div id="validationError">
    <ul>
        <li>Required: Server Name</li>
        <li>Required: Receiving Port</li>
    </ul>
</div>

使用以下CSS代码:

#validationError:before {
    content: 'The information provided is either invalid or incomplete.';
}

以下是我当前的java代码:

WebElement errorBox = browser.findElement(By.id("validationError"));
Assert.assertNotNull("Could not find validation errors", errorBox);

System.out.println("Error Explanation: " + error.getCssValue("content") + "\n");

List<WebElement> errorList = errorBox.findElements(By.tagName("li"));
for (WebElement error : errorList) {
    System.out.println("Error: " + error.getText());
}

System.out.println("\nError Full Text: " + errorBox.getText());

这是我对上述代码的输出:

Error Explanation:

Error: Required: Server Name
Error: Required: Receiving Port

Error Full Text: Required: Server Name
Required: Receiving Port

我似乎找不到一种方法来验证文本“提供的信息要么无效要么不完整。”显示。在web元素上调用getText()也不会返回预期的字符串,但会显示该div中的任何其他正常文本。有什么想法吗?

共有2个答案

梁德馨
2023-03-14

我也试过,对我有用。

已创建示例html文件:

<!DOCTYPE html>
<html>
<head>
<style>
 p::after { 
  content: " - Remember this";
}
</style>
</head>
<body>

<p id='b'>My name is Donald</p>
<p>I live in Ducksburg</p>

</body>
</html>

重复使用Nilesh的代码

    String script  = "return window.getComputedStyle(document.querySelector('p#b'), ':after').getPropertyValue('content')";
    JavascriptExecutor js = (JavascriptExecutor) UIKeyWords.getUIDriver();
    String contentValue = (String) js.executeScript(script);
    System.out.println(contentValue);
乐正浩宕
2023-03-14

我不能100%确定WebDriver是否可以为您检索伪元素内容。我认为你需要使用Javascript。下面是我测试的作品。

String script = "return window.getComputedStyle(document.querySelector('#validationError'),':before').getPropertyValue('content')";
JavascriptExecutor js = (JavascriptExecutor)driver;
String content = (String) js.executeScript(script);
System.out.println(content);

这应该能打印出来

The information provided is either invalid or incomplete.
 类似资料:
  • 问题内容: 在以下情况下,为什么:after选择器需要content属性才能起作用? 请注意,直到您指定content属性,您才看不到伪元素: 为什么这是预期的功能?您可能会认为显示块将迫使该元素显示出来。奇怪的是,您实际上可以在Web调试器中看到样式。但是,它们不会显示在页面上。 问题答案: 以下是各种W3C规范和草案的参考: 选择器级别3 伪元素’:before’和’:after’可用于在元素

  • 问题内容: 在检查Chrome Dev工具时,我注意到以下CSS片段: 可以在Chrome中完美运行(请参见下面的屏幕截图)。 这使我可以通过CSS定义标签的src属性。在Firefox中不起作用。到目前为止,我认为不可能通过CSS直接修改src属性,而且我还没有发现有人在谈论这一点。 那么,这仅仅是Chrome中的专有功能,还是Chrome正在实施W3C草案或其他我不知道的类似产品? 问题答案:

  • 问题 在解析获得一个Document实例对象,并查找到一些元素之后,你希望取得在这些元素中的数据。 方法 要取得一个属性的值,可以使用Node.attr(String key) 方法 对于一个元素中的文本,可以使用Element.text()方法 对于要取得元素或属性中的HTML内容,可以使用Element.html(), 或Node.outerHtml()方法 示例: String html =

  • 问题内容: 我想: 查找页面中所有元素的样式属性(例如:具有的所有元素) 更改所有属性(例如从到)。 您对此有何建议? 问题答案: 我的建议是尽可能避免这样做。而是使用类来分配颜色值,然后可以使用该类而不是颜色值来查找元素。 据我所知,没有可用于查询 特定 样式值的选择器(即使在CSS3中也是如此),这意味着循环遍历所有元素(或者看起来可以将其限制为具有属性的所有元素)并看着财产。现在,问题是,即

  • 问题内容: 如何将伪元素选择器()与属性选择器()组合在一起? 我尝试使用,但这在Chrome中不起作用。 HTML: CSS: 在每个div的末尾显示“ YES”,第二个div之后应显示“ NO”。 我正在运行Chrome 17.0.963.38。在Safari 5.1.2中似乎可以正常工作。 问题答案: 这看起来像个错误,终于被报道了。如果您为样式表中的任何位置 添加CSS规则并至少包含一个声

  • 本文向大家介绍jQuery修改CSS伪元素属性的方法,包括了jQuery修改CSS伪元素属性的方法的使用技巧和注意事项,需要的朋友参考一下 CSS伪元素(pseudo elements)不是DOM元素,因此你无法直接选择到它们。 假设有如下HTML代码: 和CSS代码: 现在你想在某个元素的click事件中动态的把techbrood:before的width属性设置为100%, 有两个方法,一个是