Tor*_* Bø 5 css testing selenium unit-testing css-selectors
有没有什么好的工具或方法可以自动测试CSS选择器?
我正在开发一个SCSS框架,并希望在其中包括自动化测试。具体来说,我想进行测试以确保css选择器正常工作。
举例来说,我有html:
<input class="btn" disabled id="test"></input>
Run Code Online (Sandbox Code Playgroud)
和CSS
.btn {
color: red;
...
}
.btn:disabled {
color: green;
...
}
Run Code Online (Sandbox Code Playgroud)
我想进行一次测试,确保上面id = test的元素具有.btn:disabled作为具有最高优先级的css类(具有最高特异性的最后一类),而.btn作为第二高优先级。换句话说,我想确保.btn:disabled和.btn css样式应用于元素,并且.btn:disabled中的样式将覆盖.btn中的样式。
我正在考虑在硒中这样做。有什么好的方法吗?我不想将css值硬编码到测试中。
我解决的方法是使用 getCompulatedStyle 来获取“最高优先级”的样式。在 css 中,我向 content 属性添加了一个“标签”。在 jasmine 中,我然后检查所需的标签是否是compatedStyle。(我将在 scss 中扩展它,以便如果使用测试模式而不是在生产中设置,则内容属性由 mixin 设置。)这只会对最高优先级的类进行单元测试,但不会对第二高优先级等进行单元测试。
下面是一个测试来说明该示例(只有第一个和最后一个应该通过)。
// specs code
describe("CSS", function() {
it("Div element of class test should be handled by .test", () => {
const testdiv = document.getElementById("testdiv")
m = window.getComputedStyle(testdiv).getPropertyValue("content");
expect(m).toEqual('".test"');
});
it("Div element of class test should be handled by div", () => {
const testdiv = document.getElementById("testdiv")
m = window.getComputedStyle(testdiv).getPropertyValue("content");
expect(m).toEqual('"div"');
});
it("Div element should be handled by .test", () => {
const testdiv = document.getElementById("testdiv2")
m = window.getComputedStyle(testdiv).getPropertyValue("content");
expect(m).toEqual('".test"');
});
it("Div element of class test should be handled by div", () => {
const testdiv = document.getElementById("testdiv2")
m = window.getComputedStyle(testdiv).getPropertyValue("content");
expect(m).toEqual('"div"');
});
});
// load jasmine htmlReporter
(function() {
var env = jasmine.getEnv();
env.addReporter(new jasmine.HtmlReporter());
env.execute();
}());Run Code Online (Sandbox Code Playgroud)
.test {
content: '.test';
}
div {
content: 'div';
}Run Code Online (Sandbox Code Playgroud)
<script src="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine.js"></script>
<script src="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine-html.js"></script>
<link href="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine.css" rel="stylesheet"/>
<div class="test" id="testdiv">TestDiv</div>
<div id="testdiv2">TestDiv</div>Run Code Online (Sandbox Code Playgroud)