📅  最后修改于: 2020-12-07 04:52:06             🧑  作者: Mango
黄瓜挂钩使我们能够更好地管理代码工作流程,并帮助我们减少代码冗余。我们可以说这是一个看不见的步骤,它使我们能够执行场景或测试。
为了更好地理解该概念,我们以特征文件和步骤定义文件为例。
给定语句中突出显示的部分实际上完成了设置WebDriver和结束WebDriver会话的工作。因此,它实际上与“给定语句”的本质无关,它更像是用于测试的设置。同样,如果我们考虑的范围更广,那么在此功能有多种情况的情况下,将使用每个给定的语句运行此webdriver安装和清理。从逻辑上讲,只执行一次设置和清理是有意义的。
因此,要进行优化,可以利用钩子。通常,我们使用两种类型的钩子:“ Before”钩子和“ After”钩子。即使在方案通过或失败的情况下,Before和After挂钩中定义的方法/函数/代码段也始终运行。
顾名思义,在执行钩子之前要早于任何其他测试方案,而在执行所有方案后要先执行钩子之后。
挂钩仅在步骤定义文件中定义。
让我们自动化一个挂钩前后的示例。
步骤1-将Maven项目创建为hookTest,在pom.xml中添加必要的依赖项。
第2步-在src / test / java下创建一个名为hookTest的Java包
步骤3-在包下创建一个名为hookTest.java的步骤定义文件。
package hookTest;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import cucumber.annotation.en.Given;
import cucumber.annotation.en.Then;
import cucumber.annotation.en.When;
public class hookTest {
WebDriver driver = null;
@Before public void setUp(){
driver = new FirefoxDriver();
}
@Given("^user navigates to facebook$")
public void goToFacebook() {
driver.navigate().to("https://www.facebook.com/");
}
@When("^I enter Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$")
public void I_enter_Username_as_and_Password_as(String arg1, String arg2) {
driver.findElement(By.id("email")).sendKeys(arg1);
driver.findElement(By.id("pass")).sendKeys(arg2);
driver.findElement(By.id("u_0_v")).click();
}
@Then("^login should be unsuccessful$")
public void validateRelogin() {
if(driver.getCurrentUrl().equalsIgnoreCase(
"https://www.facebook.com/login.php?login_attempt=1&lwv=110")){
System.out.println("Test Pass");
} else {
System.out.println("Test Failed");
}
driver.close();
}
@After public void cleanUp(){
driver.close();
}
}
步骤4-在包下创建一个名为“ hookTest.feature”的功能文件。
功能-方案大纲。
方案大纲-挂钩测试
给定用户导航到Facebook
当我输入用户名作为“ <用户名>”和密码作为“ <密码>”时
然后登录应该失败
| username | password |
| username1 | password1 |
步骤5-创建亚军类文件。
在包dataTable内将runner类创建为runTest.java(有关更多详细步骤,请参阅本节概述)。
编写以下代码。
package hookTest;
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
public class runTest { }
保存文件。
使用选项运行测试-
从包资源管理器中选择runTest.java文件。
右键单击并选择选项“运行方式”。
选择JUnit测试。
因此,现在当我们运行此命令时,将执行以下顺序。
挂接之前-设置Web驱动程序和其他先决条件以运行测试。
给定声明
何时声明
然后声明
挂接后-关闭WebDriver并执行清理过程。
我们还可以指示我们是否只希望使用特定标签执行挂钩之前和之后。示例-@Before(’@ Web’)。标签逻辑和/或标记的相同概念也可以与钩子一起应用。示例-@Before(@ dev,@ wip),@ Before(@ dev,〜@ wip)