Lợi thế lớn của chú thích đó không phải là chính nó. Nó được sử dụng tốt hơn để hỗ trợ PageObject pattern.
Vì vậy, thay vì phải (thông thường driver.findElement()
code):
public class TestClass {
public void testSearch() {
WebDriver driver = new HtmlUnitDriver();
driver.get("http://www.google.com/");
Element searchBox = driver.findElement(By.name("q"));
searchBox.sendKeys("stringToSearch");
searchBox.submit();
// some assertions here
}
}
Bạn muốn định nghĩa một lớp cho trang (với @FindBy
chú thích cho các yếu tố được sử dụng):
public class GooglePage {
@FindBy(how = How.NAME, using = "q")
private WebElement searchBox;
public void searchFor(String text) {
searchBox.sendKeys(text);
searchBox.submit();
}
}
Và sử dụng nó như:
public class TestClass {
public void testSearch() {
WebDriver driver = new HtmlUnitDriver();
driver.get("http://www.google.com/");
GooglePage page = PageFactory.initElements(driver, GooglePage.class);
page.searchFor("stringToSearch");
// some assertions here
}
}
Bây giờ, tôi biết điều này có vẻ dài dòng ở fi rst, nhưng chỉ cần cung cấp cho nó một thời điểm và xem xét có một số kiểm tra trường hợp cho trang đó. Nếu tên của số searchBox
thay đổi thì sao? (Từ số name
"q"
đến số id
, nói query
?)
Mã nào sẽ có nhiều thay đổi để làm cho nó hoạt động trở lại? Cái có hoặc không có đối tượng trang (và @FindBy
)? Nếu một trang thay đổi cấu trúc của nó rất nhiều, trong mã nào bảo trì sẽ dễ dàng hơn?
Có một số lợi ích khác, chẳng hạn như chú thích bổ sung như:
@FindBy(name = "q")
@CacheLookup
private WebElement searchBox;
Đó @CacheLookup
làm cho việc tra cứu cho nguyên tố này xảy ra chỉ một lần. Sau đó, nó sẽ được lưu trữ trong biến và truy cập nhanh hơn nhiều.
Hy vọng điều này sẽ hữu ích. Để biết thêm chi tiết, hãy đảm bảo kiểm tra PageFactory và PageObject pattern.
cũng nói sir ... +1 bản thân tôi thích PageFactory hơn instantiation điển hình. đơn giản hơn nhiều. – sircapsalot
+1 cho câu trả lời chi tiết như vậy .... – Akbar
Mẫu PageObject có vẻ rất hữu ích!Nhưng, tôi không thể sử dụng mẫu đó chỉ với .findElement? – pyrrhicVictory