test.before钩子会覆盖feature.beforeEach钩子。逻辑不好?

时间:2019-11-20 16:11:13

标签: testing automated-tests hook e2e-testing testcafe

文档(https://devexpress.github.io/testcafe/documentation/test-api/test-code-structure.html#test-hooks)指出:
“如果指定了test.before或test.after,它将覆盖相应的Fixture.beforeEach和Fixture.afterEach挂钩,因此不会执行后者。”

这没有逻辑意义。不应该feature.beforeEach首先执行吗?

我的代码使用feature.beforeEach挂钩来最大化浏览器。我正在工作的网站具有不同的DOM元素,具体取决于页面大小-移动设备,平板电脑,台式机等。

当TestCafe打开浏览器时,它总是很小。如果要处理桌面元素,则必须等待浏览器首先最大化。我不能在钩子之前使用test.before,因为它会尝试访问不存在的元素并立即失败。

建议:我们可以使功能.beforeEach始终始终执行吗?这类似于Cucumber中的“背景”命令,该命令在功能中的每个方案之前运行?

1 个答案:

答案 0 :(得分:1)

我不会在一个套件中混合使用诸如台式机和移动设备等不同域的测试,但是如果这样:

我建议根据即将进行的测试建立一个小黄瓜句以设置环境设置。

小黄瓜内部的业务逻辑必须更加灵活,并且Java代码必须对应于不同的Web元素,具体取决于您之前设置的开关。

您可以根据DSL黄瓜给出的参数,选择覆盖所有域(移动,台式机)的黄瓜步定义,或为每个域建立自己的句子,例如:

Either (parameter driven):
Open the Startpage on the <domain> interface

OR:
Open the Startpage on the mobile interface
AND
Open the Startpage on the desktop interface

Method for parameter-driven:

@When ("^Open the Startpage on the (.*) interface$")
public void OpenTheStartpageOnTheInterface(String domain){
if(domain.equals("desktop"){
  driver.get("desktop.url");
}else if (domain.equals("mobile")){
  driver.get("mobile.url");
}

因此,我要么使java方法复杂化以对不同的域做出反应,要么将测试套件划分为不同的词汇甚至不同的项目。