Cách xử lý Bảng Web trong Selenium WebDriver

Mục lục:

Anonim

Đọc Bảng Web HTML

Đôi khi chúng ta cần truy cập các phần tử (thường là văn bản) nằm trong bảng HTML. Tuy nhiên, rất hiếm khi nhà thiết kế web cung cấp thuộc tính id hoặc name cho một ô nhất định trong bảng. Do đó, chúng ta không thể sử dụng các phương thức thông thường như "By.id ()", "By.name ()", hoặc "By.cssSelector ()". Trong trường hợp này, tùy chọn đáng tin cậy nhất là truy cập chúng bằng phương thức "By.xpath ()".

Trong Hướng dẫn này, bạn sẽ học-

  • Cách viết XPath cho Bảng
  • Truy cập các bảng lồng nhau
  • Sử dụng thuộc tính làm dự đoán
  • Phím tắt: Sử dụng Kiểm tra Phần tử để Truy cập Bảng trong Selenium

Cách viết XPath cho Bảng

Hãy xem xét mã HTML bên dưới.

Chúng tôi sẽ sử dụng XPath để lấy văn bản bên trong của ô chứa văn bản "ô thứ tư".

Bước 1 - Đặt Phần tử gốc (bảng)

Các trình định vị XPath trong WebDriver luôn bắt đầu bằng dấu gạch chéo kép "//" và sau đó là phần tử mẹ . Vì chúng ta đang xử lý các bảng, phần tử mẹ phải luôn là thẻ

. Do đó, phần đầu tiên của bộ định vị XPath của chúng tôi phải bắt đầu bằng "// table".

Bước 2 - Thêm các phần tử con

Phần tử ngay dưới

là nên chúng ta có thể nói rằng là "con" của
. Và ngoài ra,
là "cha" của . Tất cả các phần tử con trong XPath được đặt ở bên phải phần tử mẹ của chúng, được phân tách bằng một dấu gạch chéo "/" như đoạn mã được hiển thị bên dưới.

Bước 3 - Thêm dự đoán

Phần tử

chứa hai thẻ . Bây giờ chúng ta có thể nói rằng hai thẻ này là "con" của . Do đó, chúng ta có thể nói rằng là cha của cả hai phần tử .

Một điều khác mà chúng ta có thể kết luận là hai phần tử

là anh em ruột. Anh chị em chỉ các phần tử con có cùng cha mẹ .

Để truy cập vào

thứ hai chứ không phải ô đầu tiên. Nếu chúng ta chỉ viết "// table / tbody / tr", thì chúng ta sẽ truy cập thẻ đầu tiên.

Vì vậy, làm thế nào để chúng ta truy cập

thứ hai sau đó? Câu trả lời cho điều này là sử dụng Predicates .

Dự đoán là các số hoặc thuộc tính HTML được đặt trong một cặp dấu ngoặc vuông "[]" để phân biệt một phần tử con với các phần tử con của nó . Vì

chúng ta cần truy cập là cái thứ hai, chúng ta sẽ sử dụng "[2]" làm vị ngữ.

Nếu chúng ta không sử dụng bất kỳ vị từ nào, XPath sẽ truy cập vào vị từ đầu tiên. Do đó, chúng ta có thể truy cập

đầu tiên bằng một trong hai mã XPath này.

Bước 4 - Thêm các yếu tố con thành công bằng cách sử dụng các dự đoán thích hợp

Phần tử tiếp theo chúng ta cần truy cập là

thứ tư, và vì vậy XPath của chúng ta sẽ như hình dưới đây.

Hãy nhớ rằng khi chúng ta đặt mã XPath trong Java, chúng ta nên sử dụng dấu gạch chéo ngược của ký tự thoát "\" cho dấu ngoặc kép ở cả hai bên của "270" để đối số chuỗi của By.xpath () sẽ không bị kết thúc sớm .

Bây giờ chúng tôi đã sẵn sàng truy cập vào ô đó bằng mã bên dưới.

public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";Trình điều khiển WebDriver = mới FirefoxDriver ();driver.get (baseUrl);String innerText = driver.findElement (Bởi.xpath ("// bảng [@width = \" 270 \ "] / tbody / tr [4] / td")).getText ();System.out.println (innerText);driver.quit ();}

Phím tắt: Sử dụng Kiểm tra Phần tử để Truy cập Bảng trong Selenium

Nếu số lượng hoặc thuộc tính của một phần tử cực kỳ khó hoặc không thể lấy được, thì cách nhanh nhất để tạo mã XPath là sử dụng Kiểm tra phần tử.

Hãy xem xét ví dụ dưới đây từ trang chủ Mercury Tours.

Bước 1

Sử dụng Firebug để lấy mã XPath.

Bước 2

Tìm phần tử mẹ đầu tiên của "bảng" và xóa mọi thứ ở bên trái của nó.

Bước 3

Bắt đầu phần còn lại của mã bằng dấu gạch chéo kép "//" và sao chép nó sang mã WebDriver của bạn.

Đoạn mã WebDriver bên dưới sẽ có thể lấy thành công văn bản bên trong của phần tử mà chúng ta đang truy cập.

public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";Trình điều khiển WebDriver = mới FirefoxDriver ();driver.get (baseUrl);String innerText = driver.findElement (Bởi.xpath ("// bảng / tbody / tr / td [2]"+ "// bảng / tbody / tr [4] / td /"+ "table / tbody / tr / td [2] /"+ "table / tbody / tr [2] / td [1] /"+ "bảng [2] / tbody / tr [3] / td [2] / font")).getText ();System.out.println (innerText);driver.quit ();}

Tóm lược

  • By.xpath () thường được sử dụng để truy cập các phần tử của bảng.
  • Nếu phần tử được viết sâu bên trong mã HTML để số lượng sử dụng cho vị từ rất khó xác định, chúng ta có thể sử dụng thuộc tính duy nhất của phần tử đó để thay thế.
  • Các thuộc tính được sử dụng làm vị từ bằng cách đặt tiền tố chúng bằng ký hiệu @.
  • Sử dụng Kiểm tra Phần tử để Truy cập Bảng trong Selenium
mà chúng ta muốn truy cập (ô có văn bản "ô thứ tư"), trước tiên chúng ta phải truy cập vào
thứ hai. Áp dụng các nguyên tắc chúng ta đã học được từ bước 2 và 3, chúng ta sẽ hoàn thiện mã XPath của mình giống như hình bên dưới.

Bây giờ chúng ta đã có bộ định vị XPath chính xác, chúng ta đã có thể truy cập vào ô mà chúng ta muốn và lấy văn bản bên trong của nó bằng cách sử dụng mã bên dưới. Nó giả định rằng bạn đã lưu mã HTML ở trên dưới dạng "newhtml.html" trong Ổ C của mình.

public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/write-xpath-table.html";Trình điều khiển WebDriver = mới FirefoxDriver ();driver.get (baseUrl);String innerText = driver.findElement (By.xpath ("// table / tbody / tr [2] / td [2]")). GetText ();System.out.println (innerText);driver.quit ();}}

Truy cập các bảng lồng nhau

Các nguyên tắc tương tự đã thảo luận ở trên áp dụng cho các bảng lồng nhau. Bảng lồng nhau là các bảng nằm trong một bảng khác . Một ví dụ đã được biểu diễn ở dưới.

Để truy cập ô có văn bản "4-5-6" bằng cách sử dụng "// parent / child" và các khái niệm vị từ trong phần trước, chúng ta có thể tìm ra mã XPath bên dưới.

Mã WebDriver bên dưới có thể truy xuất văn bản bên trong của ô mà chúng ta đang truy cập.

public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/accessing-nested-table.html";Trình điều khiển WebDriver = mới FirefoxDriver ();driver.get (baseUrl);String innerText = driver.findElement (By.xpath ("// table / tbody / tr [2] / td [2] / table / tbody / tr / td [2]")). GetText ();System.out.println (innerText);driver.quit ();}

Kết quả bên dưới xác nhận rằng bảng bên trong đã được truy cập thành công.

Sử dụng thuộc tính làm dự đoán

Nếu phần tử được viết sâu bên trong mã HTML để số lượng sử dụng cho vị từ rất khó xác định, chúng ta có thể sử dụng thuộc tính duy nhất của phần tử đó để thay thế.

Trong ví dụ dưới đây, ô "New York đến Chicago" nằm sâu trong mã HTML của trang chủ Mercury Tours.

Trong trường hợp này, chúng ta có thể sử dụng thuộc tính duy nhất của bảng (width = "270") làm vị từ. Các thuộc tính được sử dụng làm vị từ bằng cách đặt tiền tố chúng bằng ký hiệu @ . Trong ví dụ trên, ô "New York to Chicago" nằm ở

đầu tiên của