在量角器CSS选择器后的测试内容

问题描述 投票:0回答:3

在我的HTML我有元素如下面

HTML:

<hmtl>
    <head>
        <style>
            label::after {
            content: " *"
            }
        </style>
    </head>
    <body>
        <label> I'm mandatory</label>
    </body>
</hmtl>

那么,被显示在浏览器是:

I'm mandatory *

查询选择

>getComputedStyle(document.querySelector('label')).content
<"normal"

所以我看到的normal代替*

我看不出哪里是normal来源。这是测试::after CSS选择器的内容的正确方法是什么?

我想测试一下,有一个“*”的标签后,但似乎没有能够正确地得到“内容”属性的值。一旦我能找到它在使用浏览器的DOM API,我最终想要测试的量角器。

更新

我发现在答案 - Selenium WebDriver get text from CSS property "content" on a ::before pseudo element。现在的问题仍然是我将如何测试这个上量角器。

css selenium css-selectors protractor pseudo-element
3个回答
1
投票

const label = document.querySelector('label'); // "normal";

console.log(label);


const labelAfter = getComputedStyle(label, ':after').content;

console.log(labelAfter == "normal");
label::after {
  content: " *"
}
<label> I'm mandatory</label>

1
投票

Window.getComputedStyle()

Window.getComputedStyle()方法返回包含一个元件的所有的CSS属性的值的对象,照射活性样式表,并解决任何基本计算这些值可以含有后。个人的CSS属性值,或者用CSS属性名索引通过对象提供的API来访问。

  • 句法: var style = window.getComputedStyle(element [, pseudoElt]); element The Element for which to get the computed style. pseudoElt (Optional) A string specifying the pseudo-element to match. Omitted (or null) for real elements. The returned style is a live CSSStyleDeclaration object, which updates automatically when the element's styles are changed.
  • 您可以在WebDriver select element that has ::before的相关讨论

与伪元素的使用

getComputedStyle()可以拉从伪元素(如::after::before::marker::line-marker风格信息。

按照在HTML中,<style>如下:

<style>
    label::after {
    content: " *"
    }
</style>

实现为:

<label> I'm mandatory</label>

若要检索您需要:

var label = document.querySelector('label'); 
var result = getComputedStyle(label, ':after').content;

console.log('the generated content is: ', result); // returns ' *'

参考


0
投票

由于我的问题是明确w.r.t量角器我张贴,我得到了工作方案。来到我最初卡住部分 - 为什么我得到的“正常”改为“*”

>getComputedStyle(document.querySelector('label')).content
<"normal"

所以,早期我不知道::after创建标签元素中伪子元素。

在Chrome检查<label>元件示出了以下HTML

<label>
    I'm mandatory
    ::after
</label>

如果我click<label>元素,并检查计算的标签,我可以看到,content属性的值是normal

但是,如果我点击::after伪元素上,我可以在计算选项卡content属性的值为" *"看到。

正如在其他的答案与伪元素作为第二个参数提到getComputedStyle(),是获得“::after” CSS属性值的唯一途径。问题的症结是,量角器不具有getComputedStyle()等效的,所以我们必须依靠browser.executeScript()如下图所示:

let labelHeader = 'I'm mandatory *';
// Passing label element separately as in the real test case, it would be extracted from parent
// enclosing element and need to be able to pass it as a parameter to browser.executeScript().

let label = element(by.css('label'));
browser.executeScript("return window.getComputedStyle(arguments[0], ':after').content",
                       label)
    .then ((suffixData: string) => {
     // suffixData comes out to be '" *"', double quotes as part of the string.
     // So get rid of the first and last double quote character

         suffixData = suffixData.slice(1, suffixData.length - 1);
         labelText += suffixData;
         expect(labelText).toBe(labelHeader);
     });
© www.soinside.com 2019 - 2024. All rights reserved.