SF

""

Các cách lấy locator của web element

 

Các cách lấy locator của web element


1. Id – Lấy ra phần tử có thuộc tính @Id

Mỗi phần tử trên trang thông thường sẽ được gắn 1 id duy nhất. Và đây là cách được đánh giá là tốt nhất khi sử dụng để lấy ra locator của phần tử. Tuy nhiên là có một lưu ý, một số framework hỗ trợ dev sinh id tự động – có nghĩa là mỗi lần run thì phần tử đó lại sinh ra một id khác nhau, lúc này thì bạn không thể sử dụng id đó được. Phải tìm một cách khác để xác định được locator cần lấy, và theo kinh nghiệm của mình thì lúc này thì bạn nên chuyển sang cách lấy theo CSS class

VD: Lấy ra phần tử có id = FirstName:

WebElement firstName= driver.findElement(By.id(“FirstName”));


2. Name – Lấy ra phần tử đầu tiên tìm được có thuộc tính @Name

Gần giống như thuộc tính id, mỗi trường dữ liệu sẽ được gắn một tên duy nhất và thường thì tên này không bị thay đổi sau các lần nâng cấp hay sửa đổi. Đây là một trong những lựa chọn tốt nhất khi lấy locator cho các phần tử trong form login hoặc form mà có nhiều trường input tương tự nhau như khai báo hàng hóa hay là form register nào đó



VD: Lấy ra phần tử có name = FirstName

WebElement firstName= driver.findElement(By.name(“FirstName”));


3. Link text – Lấy ra phần tử hiển thị dòng text và có link tương ứng

Sử dụng link text là cách tuyệt vời để bạn tìm ra các liên kết trong trang web của bạn – nó thường được hiển thị dưới dạng chữ bình thường như thế này.
Rất thích hợp cho việc test điều hướng trang.

VD:


VD: Lấy ra phần tử có linktext: Tìm hiểu thêm

WebElement linkText= driver.findElement(By.linkText(“Tìm hiểu thêm”));


4. Partial Link Text – Lấy ra phần tử hiển thị dòng text và có partial link tương ứng

Cách này thì tương tự như lấy link text, chỉ khác mỗi cái ở chỗ cách sử dụng và dùng hàm để tìm ra element tương tứng với nó thôi.

Cùng xem ví dụ dưới đây để hiểu hơn nhé:

<a href=http://www.google.com.vn&#8221;>Click here to download</a>

WebElement linkText = driver.findElement(By.PartialLinkText(here));

5. Tag name – Lấy ra phần từ có HTML tag tương ứng cần lấy

Sử dụng thuộc tính tag name để lấy ra tất cả các element có tag name mà bạn muốn lấy. Để hiểu về tag name, thì các bạn xem ví dụ dưới này nhé!

Ở phía dưới là câu lệnh lấy ra tất cả các phần tử có tag name là input. Tương tự bạn có thể thay thế tag input này bằng một tag name khác, để lấy ra được các phần tử có tag name mà bạn cần lấy ra.

List<WebElement> elements = driver.findElements(By.tagName(“input”));

String[] linkTexts = new String[elements .size()];

6. CSS Class name –Truy cập vào phần tử web theo class name

CSS class locator sử dụng một thuộc tính class đặc biệt để lấy ra phần tử đầu tiên xuất hiện trong trang web, cách này hiệu quả trong việc lấy ra những item có một style duy nhất nào đó.

Dưới đây là ví dụ lấy ra phần tử có thuộc tính class name là button:

VD: Tìm ra các phần tử có class name là button: 
WebElement elements =driver.findElement(By.className(button));

7. CSS selector – Truy cập vào các phần tử web

CSS selector không khác so với XPath, nhưng cách này được đánh giá là linh hoạt và mạnh mẽ hơn nhiều so với sử dụng Xpath. Khác với XPath, CSS selector không phụ thuộc vào cấu trúc DOM. Giúp bạn có thể thực hiện được một số tương tác mà khi sử dụng XPath thì bạn khó có thể làm được.

Bạn sẽ dễ dàng để tìm ra được locator duy nhất của phần tử bằng cách kết hợp với nhiều thuộc tính CSS khác. Tuy nhiên nó cũng đòi hỏi người dùng phải có hiểu biết sâu hơn về CSS/Javascript.

VD: Lấy ra phần tử bằng cách sử dụng cssSelector:

WebElement element= driver.findElements(By.cssSelector(“input[id=FullName’]”));

8. XPath – Truy cập vào các phần tử sử dụng XPath Expression

XPath được đánh giá là một kĩ thuật ‘perfect’ dùng để duyệt qua toàn bộ cấu trúc DOM của trang web. XPath locator khá mạnh mẽ và đáng tin cậy. Ta có thể xác định được vị trí của bất kỳ phần tử nào trên page bằng cách sử dụng Xpath. Tuy nhiên chỉ cần có một sự thay đổi nhỏ trong cấu trúc trang thì bạn sẽ phải cập nhật lại hết những thông tin liên quan bạn đã lấy trước đó.

Ta có thể phân loại XPath theo hai nhóm sau:

XPath tuyệt đối (Absolute XPath)

– Nó bắt đầu từ phần tử gốc cho đến vị trí của locator đích cần lấy.

Ví dụ:

HTML/head/body/table/tr/td


Bạn có thể dễ dàng lấy ra được XPath cho phần tử đó, tuy nhiên như đã nói ở trên, nếu cấu trúc trang bị thay đổi thì XPath này cũng phải cập nhật lại toàn bộ.

XPath tương đối (Relative XPath)

Sử dụng Relative XPath bạn sẽ dễ dàng quản lý hơn vì nó ngắn gọn hơn và súc tích hơn. Có thể bị ảnh hưởng ít hơn khi gặp vấn đề về cấu trúc trang bị thay đổi so với XPath tuyệt đối. Để lấy được XPath tương đối thì bạn sẽ mất nhiều thời gian hơn để xác định và kiểm tra được các node cần lấy.

Ví dụ:

//table/tr/td

Sử dụng XPath để lấy ra locator của phần tử bạn có thể đảm bảo được là các phần tử đều có thể được tìm ra, tuy nhiên xét về hiệu năng thì cách này sẽ chậm hơn so với sử dụng CSS, ngoài ra nó còn phụ thuộc vào trình duyệt sử dụng (như IE và FF thì việc thực thi XPath là không giống nhau).