使用 Cucumber / Selenium 测试 CSS 计数器
Posted
技术标签:
【中文标题】使用 Cucumber / Selenium 测试 CSS 计数器【英文标题】:Testing CSS counters using Cucumber / Selenium 【发布时间】:2013-12-07 06:42:58 【问题描述】:我试图为其创建步骤定义的要求之一是每个元素都应该被编号。是否有用于检查项目是否具有正确的 CSS 生成内容的 API?
我们正在使用 Selenium、Cucumber 和 Capybara 来测试我们的应用。
我们想要自动测试的 CSS:
ul
counter-reset: steps;
li:before
content: counter(steps) ".";
counter-increment: steps;
或者,我们可以将实际内容放在 DOM 中,但我不喜欢仅仅为了满足 webdriver 而编写代码,这是解决编号问题的一个很好的解决方案,或者坚持手动测试这种行为。
编辑: 澄清一下,我认为这需要外部 API 进行查询,例如 Selenium Webdriver,因为 getComputedStyle 不会返回实际呈现的内容:http://jsfiddle.net/yTUnt/
【问题讨论】:
生成的内容仅适用于:before
和 :after
伪元素 - 你确定你的 CSS 是正确的吗?
@BoltClock'saUnicorn 不,不,我没有:D 纠正 - 谢谢!
好吧,您不能使用标准 API(DOM、CSSOM、...)。您的目标是哪些浏览器?
@CarloCannas 是的,意识到这一点。我想我希望 Webdriver 能为这些伪元素提供某种接口。在这种情况下,目标是 Firefox。
@SimonScarfe:我从未使用过 Selenium,但我查看了它的源代码和文档,但找不到任何对这个问题有用的东西。即使在 Firefox 中也没有访问 CSS 生成内容的 javascript API,我只设法找到了一个能够获取生成内容的可访问性测试用例,但它需要 chrome 权限,因此您需要修补 Selenium 驱动程序。这是:mxr.mozilla.org/mozilla-central/source/accessible/tests/…
【参考方案1】:
很明显,没有允许查询计数器值的公共标准接口:
How to access CSS generated content with JavaScript
How can I read the applied CSS-counter value?
没有证据表明自最初提出这些问题以来情况发生了变化,并且现在可以这样做。
也许我们可以使用浏览器向其自己的测试套件公开的私有 API 来检查我们的应用程序是否完成了它应该做的事情,但是私有 API 可能会在浏览器的开发人员需要时更改或消失,而这些 API 通常是特定于浏览器。
没有迹象表明 WebDriver 本身与任何私有 API 挂钩以提供此类功能。
有一个选项不依赖私有 API,并且不需要污染 DOM 或自己执行编号。这个选项是首先手动确定需要在我们的元素上设置哪些 CSS 参数以获得我们想要的结果,然后在测试套件中验证这些参数在运行时确实存在。我有一个示例here,基于问题中提供的小提琴。在示例中,一个列表接收自定义编号,因为它具有custom
类。第二个列表无法获得我们想要的编号,因为(模拟的)错字,它具有costum
类。通过使用getComputedStyle
,我们可以在应用所有样式后验证对感兴趣的元素应用了什么。因此,我们可以检测元素是否由于 CSS 中的拼写错误、style
属性中的拼写错误或相互干扰的 CSS 规则而无法获得正确的 CSS 参数。
在示例中,检查是在浏览器端执行的。 Ruby 中的 Selenium 等价物是使用 css_value
方法来获取我们感兴趣的参数的值。
【讨论】:
以上是关于使用 Cucumber / Selenium 测试 CSS 计数器的主要内容,如果未能解决你的问题,请参考以下文章
远程 Selenium WebDriver 不响应 Cucumber 测试
行为驱动:Cucumber + Selenium + Java - 使用标签实现测试分组
行为驱动:Cucumber + Selenium + Java - 实现测试用例的参数化
Cucumber, capybara and selenium - 无需按钮即可提交表单
需要帮助在 junit 运行中使用 cucumber、selenium、maven、TestNG 运行跨浏览器(多浏览器)测试