Dưa chuột - Móc
Quả dưa chuột hookcho phép chúng tôi quản lý quy trình làm việc mã tốt hơn và giúp chúng tôi giảm bớt sự dư thừa mã. Chúng tôi có thể nói rằng đó là một bước không thể nhìn thấy, cho phép chúng tôi thực hiện các kịch bản hoặc thử nghiệm của mình.
Để hiểu rõ hơn khái niệm này, chúng ta hãy lấy một ví dụ về tệp đặc trưng và tệp định nghĩa bước.
Phần được đánh dấu trong câu lệnh đã cho thực sự thực hiện công việc thiết lập webdriver và kết thúc phiên webdriver. Vì vậy, nó thực sự không liên quan đến bản chất của “Câu lệnh đưa ra”, và nó giống như một thiết lập cho bài kiểm tra hơn. Ngoài ra, nếu chúng ta nghĩ với một triển vọng rộng lớn hơn, thì trong trường hợp có nhiều tình huống cho tính năng này, thiết lập và dọn dẹp webdriver này sẽ chạy với mỗi câu lệnh nhất định. Về mặt logic, việc thiết lập và dọn dẹp chỉ được thực thi một lần.
Vì vậy, để mang lại sự tối ưu hóa, móc có thể được sử dụng. Thông thường chúng tôi sử dụng hai loại móc: móc “Trước” và móc “Sau”. Phương thức / chức năng / đoạn mã, được xác định trong móc Trước và Sau, luôn chạy, ngay cả khi kịch bản được thông qua hoặc không thành công.
Như tên cho thấy, trước khi hook được thực thi tốt trước bất kỳ kịch bản thử nghiệm nào khác và sau khi hook được thực thi sau khi thực hiện tất cả các kịch bản.
Các móc chỉ được định nghĩa trong tệp định nghĩa bước.
Hãy tự động hóa một ví dụ về trước và sau hook.
Step 1 - Tạo dự án Maven dưới dạng hookTest, thêm phụ thuộc cần thiết trong pom.xml.
Step 2 - Tạo một gói Java có tên là hookTest dưới src/test/java
Step 3 - Tạo một tệp định nghĩa bước có tên là hookTest.java dưới gói.
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();
}
}
Step 4 - Tạo một tệp tính năng có tên “hookTest.feature” trong gói.
Feature - Đề cương tình huống.
Scenario Outline - Kiểm tra móc
Cho phép người dùng điều hướng đến Facebook
Khi tôi nhập Tên người dùng là "<tên người dùng>" và Mật khẩu là "<mật khẩu>"
Sau đó đăng nhập sẽ không thành công
Ví dụ
| username | password |
| username1 | password1 |
Step 5 - Tạo tệp lớp á hậu.
Tạo lớp chạy dưới dạng runTest.java bên trong gói dataTable (xem phác thảo kịch bản phần để biết các bước chi tiết hơn).
Viết đoạn mã sau.
package hookTest;
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
public class runTest { }
Lưu các tập tin.
Chạy thử nghiệm bằng cách sử dụng tùy chọn -
Chọn tệp runTest.java từ trình khám phá gói.
Nhấp chuột phải và chọn tùy chọn, Chạy dưới dạng.
Chọn thử nghiệm JUnit.
Vì vậy, bây giờ khi chúng ta chạy nó, sau đây sẽ là trình tự thực hiện.
Trước khi hook - Thiết lập webdriver và các điều kiện tiên quyết khác để chạy thử nghiệm.
Tuyên bố đưa ra
Khi tuyên bố
Sau đó tuyên bố
Sau khi hook - Đóng webdriver và thực hiện quá trình dọn dẹp.
Móc gắn thẻ
Chúng tôi cũng có thể chỉ ra nếu chúng tôi muốn các hook trước và sau chỉ được thực thi với một thẻ cụ thể. Example- @Before ('@ Web'). Khái niệm tương tự về thẻ logic và / hoặc cũng có thể được áp dụng với hook.Example - @Before (@ dev, @ wip), @Before (@ dev, ~ @ wip)