2015-07-01 17 views
6

Ví dụ,Tìm một phần tử trong phần tử bằng cách sử dụng chú thích @FindBy.

WebElement parentEle = driver.findElement(By.id("xyz")); 
WebElement childEle = parentEle.findElement(By.id("abc")); 
childEle.click(); 

Trong ví dụ trên, Chúng tôi đang tìm kiếm childEle với trong parentEle. Làm cách nào để chúng tôi có thể đạt được điều này bằng cách sử dụng chú thích @FindBy (kết hợp với PageFactory)

Trả lời

1

Trước hết, tại sao bạn cần tìm con từ cha mẹ nếu con có id UNIQUE? Mục đích chính của id là cung cấp tính linh hoạt của việc tìm kiếm phần tử với một bộ chọn duy nhất.

Trong trường hợp nếu phần tử con thực sự được lồng vào nhau, hãy tìm bằng xpath. Tôi thường sử dụng nó.

@FindBy(how = How.XPATH, using = "//something/something") 
private WebElement TestElement; 

Hoặc với ID

@FindBy(how = How.ID, using = "abc") 
private WebElement TestElement; 
+3

Cảm ơn bạn đã trả lời Saifur. Tôi hiểu. Khi chúng ta đi theo id chúng ta có thể trực tiếp tìm thấy nó. Nhưng tôi chỉ trích dẫn nó như là một ví dụ. Lemme giải thích kịch bản của tôi. Tôi có nhiều thẻ li với cùng một tên lớp nhưng giá trị khác nhau. Và mỗi người có con cái của họ. Vì vậy, tôi cần phải có được thẻ cha (li ở đây) và làm việc trên các phần tử con của nó. Tôi có thể đạt được điều này theo cách findElement bình thường, nhưng tôi muốn biết cách chúng ta có thể làm điều đó bằng cách sử dụng chú thích @FIndBy. Vui lòng trả lời tôi. – ram

0
@FindBy (id = "abc") 
private WebElement TestElement; 

Trong nhà máy trang của bạn thử điều này và gọi đó là phương pháp từ phương pháp thử nghiệm của bạn.

public WebElement Child_Of_ParentElement(WebElement TestElement, String Child_Id) 
{ 
    return TestElement.findElement(By.id(Child Id)); 
} 
0

này có thể đạt được trong vài bước sau:

//identify parent element with @FindBy annotation 
    1) @FindBy(className="locator") 
     List<WebElement> parent; 

//loop through each parent to get child(<li> in your case) of each parent  
    2) for(WebElement list_items:Parent){ 
     list_items.findElement(By.xpath("child locator")); 

tôi đã sử dụng phương pháp này và đã có thể đạt được kết quả mong muốn. Hy vọng điều này cũng giải thích truy vấn của bạn.

0

Như đã nêu trong các câu trả lời khác, tôi sẽ sử dụng xpath mặc dù bạn sẽ phải viết lại đường dẫn gốc cho từng phần tử con, trừ khi bạn tạo chuỗi không đổi hoặc thứ gì đó nhưng có thể bắt đầu lộn xộn.

// Child 1 
@FindBy(xPath = "//[@id='xyz']/[@id='abc']"; 
private WebElement childAbcOfParentXyz; 
// Child 2 
@FindBy(xPath = "//[@id='xyz']/[@id='def']"; 
private WebElement childDefOfParentXyz; 
Các vấn đề liên quan