Định vị các phần tử theo Văn bản Liên kết & Văn bản liên kết một phần trong Selenium Webdriver

Mục lục:

Anonim

Văn bản liên kết trong Selenium là gì?

Một Text Link trong Selenium được sử dụng để xác định các siêu liên kết trên một trang web. Nó được xác định với sự trợ giúp của thẻ liên kết. Để tạo các siêu liên kết trên một trang web, chúng ta có thể sử dụng một thẻ liên kết theo sau là Văn bản liên kết.

Liên kết phù hợp với tiêu chí

Các liên kết có thể được truy cập bằng cách sử dụng kết hợp chính xác hoặc một phần của văn bản liên kết của chúng. Các ví dụ dưới đây cung cấp các tình huống trong đó nhiều kết quả trùng khớp sẽ tồn tại và sẽ giải thích cách WebDriver giải quyết chúng.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu các phương pháp có sẵn để tìm và truy cập các Liên kết bằng cách sử dụng Webdriver. Ngoài ra, chúng tôi sẽ thảo luận về một số vấn đề phổ biến gặp phải khi truy cập vào Liên kết và sẽ thảo luận thêm về cách giải quyết chúng.

Đây là những gì bạn sẽ học-

  • Truy cập các liên kết bằng Đối sánh Văn bản Chính xác: By.linkText ()
  • Truy cập các liên kết bằng Khớp văn bản từng phần: By.partialLinkText ()
  • Cách nhận nhiều liên kết với cùng một văn bản liên kết
  • Phân biệt chữ hoa chữ thường cho Văn bản liên kết
  • Liên kết bên ngoài và bên trong một khối

Truy cập các liên kết bằng Đối sánh Văn bản Chính xác: By.linkText ()

Việc truy cập các liên kết bằng văn bản liên kết chính xác của chúng được thực hiện thông qua phương thức By.linkText () . Tuy nhiên, nếu có hai liên kết có cùng văn bản liên kết, phương pháp này sẽ chỉ truy cập liên kết đầu tiên. Hãy xem xét mã HTML bên dưới

Khi bạn cố gắng chạy mã WebDriver bên dưới, bạn sẽ truy cập vào liên kết "nhấp vào đây" đầu tiên

Mã:

nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.chrome.ChromeDriver;lớp công khai MyClass {public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/link.html";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Trình điều khiển WebDriver = mới ChromeDriver ();driver.get (baseUrl);driver.findElement (By.linkText ("nhấp vào đây")). click ();System.out.println ("tiêu đề của trang là: + driver.getTitle ());driver.quit ();}}

Đây là cách nó làm việc-

Kết quả là bạn sẽ tự động được đưa đến Google.

Truy cập các liên kết bằng Khớp văn bản từng phần: By.partialLinkText ()

Việc truy cập các liên kết bằng cách sử dụng một phần văn bản liên kết của chúng được thực hiện bằng phương thức By.partialLinkText () . Nếu bạn chỉ định một phần văn bản liên kết có nhiều kết quả phù hợp, thì chỉ kết quả phù hợp đầu tiên mới được truy cập. Hãy xem xét mã HTML bên dưới.

Khi bạn thực thi mã WebDriver bên dưới, bạn vẫn sẽ được đưa đến Google.

Mã:

nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.chrome.ChromeDriver;lớp công cộng P1 {public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/accessing-link.html";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Trình điều khiển WebDriver = mới ChromeDriver ();driver.get (baseUrl);driver.findElement (By.partialLinkText ("here")). click ();System.out.println ("Tiêu đề của trang là: + driver.getTitle ());driver.quit ();}}

Cách nhận nhiều liên kết với cùng một văn bản liên kết

Vì vậy, làm thế nào để giải quyết vấn đề trên? Trong trường hợp có nhiều liên kết với cùng một văn bản liên kết và chúng ta muốn truy cập vào các liên kết khác với liên kết đầu tiên, chúng ta phải làm như thế nào?

Trong những trường hợp như vậy, nói chung, các bộ định vị khác nhau viz… By.xpath (), By.cssSelector () hoặc By.tagName () được sử dụng.

Thường được sử dụng nhất là By.xpath (). Nó là một trong những đáng tin cậy nhất nhưng nó trông phức tạp và không thể đọc được.

Phân biệt chữ hoa chữ thường cho Văn bản liên kết

Các tham số cho By.linkText ()By.partialLinkText () đều phân biệt chữ hoa chữ thường, nghĩa là viết hoa rất quan trọng. Ví dụ: trong trang chủ của Mercury Tours, có hai liên kết có chứa văn bản "egis" - một là liên kết "ĐĂNG KÝ" ở menu trên cùng và liên kết kia là liên kết "Đăng ký tại đây" ở phần dưới bên phải của trang.

Mặc dù cả hai liên kết đều chứa chuỗi ký tự "egis", một là phương thức "By.partialLinkText ()" sẽ truy cập hai liên kết này riêng biệt tùy thuộc vào cách viết hoa của các ký tự. Xem mã mẫu bên dưới.

public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Trình điều khiển WebDriver = mới ChromeDriver ();driver.get (baseUrl);String theLinkText = driver.findElement (Bởi.partialLinkText ("egis")).getText ();System.out.println (theLinkText);theLinkText = driver.findElement (Bởi.partialLinkText ("EGIS")).getText ();System.out.println (theLinkText);driver.quit ();}

Liên kết bên ngoài và bên trong một khối

Tiêu chuẩn HTML5 mới nhất cho phép các thẻ được đặt bên trong và bên ngoài các thẻ cấp khối như

,

hoặc

. Phương thức "By.linkText ()" và "By.partialLinkText ()" có thể truy cập vào một liên kết nằm bên ngoài và bên trong các phần tử cấp khối này. Hãy xem xét mã HTML bên dưới.

Mã WebDriver bên dưới truy cập cả hai liên kết này bằng phương thức By.partialLinkText ().

Mã:

nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.chrome.ChromeDriver;lớp công khai MyClass {public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/block.html";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Trình điều khiển WebDriver = mới ChromeDriver ();driver.get (baseUrl);driver.findElement (By.partialLinkText ("Inside")). click ();System.out.println (driver.getTitle ());driver.navigate (). back ();driver.findElement (By.partialLinkText ("Bên ngoài")). click ();System.out.println (driver.getTitle ());driver.quit ();}}

Kết quả ở trên xác nhận rằng cả hai liên kết đã được truy cập thành công vì tiêu đề trang tương ứng của chúng đã được truy xuất chính xác.

Tóm lược

  • Các liên kết được truy cập bằng phương thức click ().
  • Ngoài các bộ định vị có sẵn cho bất kỳ WebElement nào, Liên kết cũng có các bộ định vị dựa trên văn bản liên kết:
    • By.linkText () - định vị các liên kết dựa trên sự trùng khớp chính xác với văn bản của liên kết được cung cấp dưới dạng tham số.
    • By.partialLinkText () - định vị các liên kết dựa trên phần văn bản khớp với văn bản của liên kết.
  • Cả hai công cụ định vị trên đều có Phân biệt chữ hoa chữ thường.
  • Nếu có nhiều kết quả phù hợp, By.linkText () và By.partialLinkText () sẽ chỉ chọn kết quả phù hợp đầu tiên. Trong những trường hợp có nhiều liên kết với cùng một văn bản liên kết, các trình định vị khác dựa trên xpath, CSS sẽ được sử dụng.
  • Phương thức findElements () & By.tagName ("a") tìm tất cả các phần tử trong trang phù hợp với tiêu chí định vị
  • Các liên kết có thể được truy cập bởi By.linkText () và By.partialLinkText () cho dù chúng là các phần tử cấp khối bên trong hay bên ngoài.