【问题标题】:Selenium WebDriver get text from CSS property "content" on a ::before pseudo elementSelenium WebDriver 从 ::before 伪元素上的 CSS 属性“内容”获取文本
【发布时间】:2015-03-30 11:04: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 中显示任何其他正常文本。有什么想法吗?

【问题讨论】:

  • 你能提供html吗?
  • 抱歉,我的代码格式有问题,我没有意识到每个代码 sn-p 之前都需要换行符。现在有意义吗?
  • 确实如此。但是,你知道webdriver 会先找到元素吗?另外请提供堆栈跟踪问题以供将来参考
  • 您能否提供更多的 HTML,包括您尝试访问的文本?
  • 我已经更新了我的 HTML 并包含了更多的 java 代码来帮助解释发生了什么。页面呈现如下:The information provided is either invalid or incomplete.Required: Server NameRequired: Receiving Port 我正在尝试验证第一行,“提供的信息无效或不完整。”。但是,由于它来自 CSS,我似乎无法通过正常方式访问它。

标签: css selenium webdriver


【解决方案1】:

我不能 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.

【讨论】:

    【解决方案2】:

    试过了,对我有用。

    创建示例 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 2012-12-26
      • 1970-01-01
      相关资源
      最近更新 更多