Selenium JavaScript tìm phần tử theo lớp

Chúng tôi biết rằng một trang web bao gồm nhiều Thành phần Web như hộp văn bản, nút, danh sách, v.v. Chúng ta có thể thực hiện nhiều hành động khác nhau trên các WebElements này bằng các lệnh Selenium như các phần tử tìm kiếm, liên kết các sự kiện với các phần tử web, v.v. Để thực hiện các hành động này, trước tiên chúng ta cần tương tác với một trang web để có thể sử dụng các Lệnh/hành động của WebElement. Trong chủ đề này, chúng ta sẽ thảo luận về các phương pháp khác nhau được sử dụng để tìm một phần tử trên trang web bằng Selenium để chúng ta có thể thực hiện các hành động trên các phần tử này. Chúng tôi sẽ đề cập đến các chủ đề sau trong bài viết này

  • Tìm phần tử bằng Selenium WebDriver?
  • Tại sao chúng ta cần tìm phần tử web trong Selenium?
  • Làm cách nào để tìm các phần tử trong Selenium?
  • Theo lớp trong Selenium là gì?
  • Sự khác biệt giữa tìm phần tử và tìm phần tử trong Selenium

Tìm phần tử bằng Selenium WebDriver?

Như đã đề cập ở trên để tương tác với WebElements, trước tiên chúng ta phải tìm hoặc định vị các phần tử này trên trang web. Chúng ta có thể tìm thấy các phần tử trên một trang web bằng cách chỉ định các thuộc tính như Id của phần tử hoặc tên lớp của phần tử và các tham số khác như vậy. Những lựa chọn thay thế này mà chúng ta có thể tìm thấy các thành phần trên trang web được gọi là chiến lược định vị

Sau đây là các chiến lược định vị chúng ta có thể sử dụng trong khi định vị các phần tử

LocatorDescriptionidtìm phần tử theo thuộc tính ID. Giá trị tìm kiếm đã cho phải khớp với thuộc tính ID. nameFinds hoặc Locates phần tử dựa trên thuộc tính NAME. Thuộc tính tên được sử dụng để khớp với giá trị tìm kiếm. tên lớpTìm các phần tử khớp với tên lớp được chỉ định. Lưu ý rằng các lớp ghép không được phép làm tên chiến lược. tên thẻTìm hoặc Định vị các phần tử có tên thẻ khớp với giá trị tìm kiếm. Bộ chọn CSS Khớp bộ chọn CSS để tìm phần tử. XPath Khớp biểu thức XPath với giá trị tìm kiếm và dựa vào đó phần tử được định vị. văn bản liên kếtĐây là văn bản hiển thị có các phần tử neo được tìm thấy khớp với giá trị tìm kiếm. văn bản liên kết một phầnỞ đây chúng tôi cũng khớp văn bản hiển thị với giá trị tìm kiếm và tìm giá trị liên kết. Nếu chúng tôi khớp nhiều phần tử, chỉ mục nhập đầu tiên sẽ được chọn

Bây giờ trước khi chuyển sang cách chúng ta có thể sử dụng các loại công cụ định vị khác nhau này để định vị các phần tử, trước tiên hãy hiểu chính xác tại sao lại cần tìm các phần tử trong Selenium?

Tại sao chúng ta cần tìm một phần tử trong Selenium?

Chúng tôi biết rằng chúng tôi sử dụng Selenium chủ yếu để thử nghiệm giao diện người dùng của một ứng dụng dựa trên web. Vì chúng tôi cần thực hiện tương tác tính năng tự động với trang web, nên chúng tôi cần xác định vị trí các phần tử web để có thể kích hoạt một số sự kiện JavaScript trên các phần tử web như nhấp, chọn, nhập, v.v. hoặc thêm/cập nhật giá trị trong các trường văn bản. Để thực hiện các hoạt động này, điều quan trọng trước tiên là xác định vị trí phần tử trên trang web và sau đó thực hiện tất cả các hành động này

Ví dụ: giả sử có một trang web "demoqa. com" như hình bên dưới

Selenium JavaScript tìm phần tử theo lớp

Bây giờ, giả sử chúng ta cần thực hiện một số thao tác trên nút " THAM GIA NGAY ". Vì vậy, trước khi triển khai mã cho sự kiện nói nhấp vào nút này, trước tiên chúng ta sẽ phải tìm phần tử này trên trang web. Vì vậy, làm thế nào chúng ta sẽ tìm thấy yếu tố để chúng ta có thể tiếp tục hành động của mình?

Chúng tôi sẽ sử dụng hai phương thức 'findElement' và 'findElements' do Selenium WebDriver cung cấp cho mục đích này. Bây giờ chúng ta hãy tiếp tục và hiểu chi tiết về các phương pháp này

Làm cách nào để tìm các phần tử trong Selenium?

Như đã thảo luận, Selenium WebDriver cung cấp hai phương thức mà chúng ta có thể tìm thấy một phần tử hoặc danh sách các phần tử trên một trang web. đó là

findElement(). Phương pháp này tìm duy nhất một phần tử web trên trang web

findElements(). Phương pháp này tìm danh sách các phần tử web trên trang web

Hãy cùng tìm hiểu cách sử dụng và chi tiết của các phương thức này trong các phần sau

findElement() trong Selenium

Phương thức findElement() của Selenium WebDriver tìm một phần tử web duy nhất trong trang web

Cú pháp của nó trông giống như bên dưới

WebElement elementName = driver.findElement
                  (By.LocatorStrategy("LocatorValue"));

Như thể hiện trong cú pháp trên, lệnh này chấp nhận đối tượng "By" làm đối số và trả về một đối tượng WebElement

"By" là một công cụ định vị hoặc đối tượng truy vấn và chấp nhận công cụ định vị hoặc các chiến lược mà chúng tôi đã thảo luận ở trên. Vì vậy, nếu chúng ta viết dòng "trình điều khiển. findElement( Bởi. )" thì IntelliSense của Eclipse sẽ đưa ra các chiến lược định vị sau đây mà chúng ta có thể liên kết với Theo đối tượng

Selenium JavaScript tìm phần tử theo lớp

Ảnh chụp màn hình ở trên hiển thị tất cả các tùy chọn mà chúng tôi nhận được khi viết 'By'. Chúng tôi sẽ giải thích từng chiến lược trong các phần sau của chương này

Ghi chú. Trong trường hợp không tìm thấy phần tử phù hợp, lệnh findElement ném NoSuchElementException

Nhưng điều gì sẽ xảy ra nếu có nhiều phần tử phù hợp với tiêu chí được cung cấp trong phương thức findElement()?

findElements() trong Selenium

Lệnh findElements() trả về danh sách các phần tử web phù hợp với tiêu chí đã chỉ định, không giống như lệnh findElement() trả về một phần tử duy nhất. Nếu không có phần tử phù hợp thì một danh sách trống sẽ trả về

Cú pháp chung của lệnh findElements() trong Selenium WebDriver như sau

List elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));

Giống như lệnh findElement(), phương thức này cũng chấp nhận đối tượng "By " làm tham số và trả về danh sách WebElement

Chúng ta hãy xem xét một ví dụ trong đó chúng ta cần tìm số phần tử có tên thẻ là "đầu vào " trên trang hộp văn bản DemoQA. Bảng kiểm tra cho điều này như dưới đây

Selenium JavaScript tìm phần tử theo lớp

Trong ảnh chụp màn hình ở trên, khi chúng tôi tìm kiếm tên thẻ 'đầu vào', hai mục trả về (được hiển thị bằng hình chữ nhật màu đỏ xung quanh công cụ tìm kiếm có nội dung 1/2)

Chương trình sau đây hiển thị ví dụ về phương thức findElements() trong đó chúng ta cung cấp đối tượng By với tagName

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class FindElementByTagName {
   public static void main(String[] args) {
	   System.setProperty("webdriver.chrome.driver", "C:/testSelenium/chromedriver.exe");		

	   WebDriver driver = new ChromeDriver();

	   driver.get("https://demoqa.com/text-box/");
		
	   // Find elements using tag name
	   List allInputElements = driver.findElements(By.tagName("input"));
		
	   if(allInputElements.size() != 0) 
	   {
		   System.out.println(allInputElements.size() + " Elements found by TagName as input \n");
			
		   for(WebElement inputElement : allInputElements) 
		   {
			   System.out.println(inputElement.getAttribute("placeholder"));
		   }
	   }
   }
}

Sau đây là đầu ra của chương trình

Selenium JavaScript tìm phần tử theo lớp

Tiếp theo, hãy cho chúng tôi hiểu cách sử dụng các chiến lược định vị khác nhau với các lệnh findElement() và findElements()

Theo lớp trong Selenium là gì?

Trong phần này, chúng ta sẽ hiểu cách sử dụng findElement() và findElements() của Selenium WebDriver với các chiến lược khác nhau bằng cách sử dụng lớp By. Lớp 'By' chấp nhận các chiến lược định vị khác nhau được giải thích ở trên để tìm một phần tử hoặc nhiều phần tử trên trang web. Hãy để chúng tôi thảo luận về tất cả các chiến lược định vị theo lớp

Làm cách nào để tìm một phần tử bằng thuộc tính "id" trong Selenium?

Sử dụng "id " để tìm phần tử cho đến nay là chiến lược phổ biến nhất được sử dụng để tìm phần tử. Giả sử nếu trang web sử dụng id được tạo động, thì chiến lược này sẽ trả về phần tử web đầu tiên khớp với id

Chiến lược này được ưa thích vì hầu hết các trang web được thiết kế bằng cách liên kết id với các phần tử. Điều này là do sử dụng ID là cách dễ nhất và nhanh nhất để xác định vị trí các phần tử vì tính đơn giản của nó trong khi viết mã trang web. Giá trị của thuộc tính id là một tham số kiểu String

Cú pháp chung của lệnh findElement() sử dụng chiến lược By id là

WebElement elm = driver.findElement(By.id("Element_Id"));

Ví dụ, hãy xem xét phần tử sau trong trang hộp văn bản DemoQA

Selenium JavaScript tìm phần tử theo lớp

Ở đây chúng tôi đã chọn nút "gửi" (được đánh dấu 1). Mã phần tử cho điều này được đánh dấu 2 trong ảnh chụp màn hình ở trên

Lệnh findElement() tương ứng với phần tử trên

WebElement element = driver.findElement(By.id("submit"));
// Action can be performed on Button element
element.submit();

Ghi chú. Nếu không có thành phần web nào trong trang web khớp với thuộc tính id thì "NoSuchElementException" sẽ xuất hiện

Ghi chú. Các nhà phát triển giao diện người dùng phải đảm bảo rằng các id trên trang là duy nhất. Các id được tạo tự động hoặc được tạo động thường không phải là duy nhất

Chương trình hoàn chỉnh để tìm một phần tử bằng cách sử dụng "By. đối tượng id " như được thấy bên dưới

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class FindElementById {

     public static void main(String[] args) {
		
	System.setProperty("webdriver.chrome.driver", "C:/testSelenium/chromedriver.exe");		
		
	WebDriver driver = new ChromeDriver();
		
	driver.get("https://demoqa.com/text-box/");
        WebElement element = driver.findElement(By.id("submit"));
		
		
	if(element != null) {
	    System.out.println("Element found by ID");
	}
   }
}

Chương trình này cho đầu ra sau

Selenium JavaScript tìm phần tử theo lớp

Chương trình trên là chương trình tìm phần tử sử dụng id (By. Id) của phần tử đó. Chúng tôi cung cấp một URL thích hợp mà từ đó chúng tôi cần tìm kiếm một phần tử và sau đó gọi "findElement()" với đối số By. id("phần tửID"). Cuộc gọi này trả về phần tử đã cho với id được chỉ định

Làm cách nào để tìm một phần tử bằng thuộc tính "tên" trong Selenium?

Chiến lược này giống như id ngoại trừ việc bộ định vị định vị một phần tử bằng cách sử dụng "tên" thay vì "id"

Giá trị của thuộc tính NAME được chấp nhận thuộc loại Chuỗi. Cú pháp chung của phương thức findElement() với chiến lược By Name như sau

WebElement elm = driver.findElement(By.name("Element_NAME"));

Ví dụ: hãy xem xét phần tử sau trên trang DemoQAAutomationPracticeForm

Selenium JavaScript tìm phần tử theo lớp

Trong ảnh chụp màn hình ở trên, chúng tôi chọn giá trị giới tính đầu tiên (được đánh dấu 1). Phần tử tương ứng của nó trong DOM được đánh dấu (được đánh dấu 2)

Lệnh gọi phương thức findElement() tương ứng cho phần tử trên là

WebElement element = driver.findElement(By.name("gender"));
// Action can be performed on Input Text element
element.sendKeys("ToolsQA");

Kết quả của cuộc gọi phương thức này, phần tử đầu tiên khớp với giá trị thuộc tính tên đã cho sẽ trả về. Nếu chúng tôi không thể tìm thấy kết quả phù hợp, NoSuchElementException sẽ tăng

Cung cấp tên như một chiến lược cũng là một cách hiệu quả để tìm một phần tử nhưng một lần nữa nếu tên không phải là duy nhất thì phương thức sẽ bị ảnh hưởng

Ví dụ, xét yếu tố sau

Selenium JavaScript tìm phần tử theo lớp

Trong ảnh chụp màn hình ở trên, có hai thành phần có cùng tên =  giới tính. Trong trường hợp này, phương thức findElement() trả về phần tử đầu tiên

Đoạn mã sau hiển thị chương trình tìm một phần tử bằng Tên (By. Tên)

________số 8_______

Chương trình cho đầu ra sau

Selenium JavaScript tìm phần tử theo lớp

Chương trình trên tìm một phần tử trong Selenium sử dụng tên. Chúng tôi cung cấp tên của phần tử mà chúng tôi có thể phải tìm kiếm làm đối số cho đối tượng By trong lệnh gọi 'findElement()'

Làm cách nào để tìm một phần tử bằng thuộc tính "tên lớp" trong Selenium?

Ở đây, giá trị của thuộc tính "class" được chuyển thành bộ định vị. Chiến lược này chủ yếu được sử dụng để tìm nhiều phần tử sử dụng các lớp CSS tương tự

Chiến lược định vị 'Theo tên lớp' tìm các phần tử trên trang web dựa trên giá trị thuộc tính LỚP. Chiến lược chấp nhận một tham số kiểu String. Cú pháp chung với chiến lược Tên lớp được đưa ra bởi

List webList = driver.findElements(By.className()) ;

hoặc là

List elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));
0

Cú pháp đầu tiên là lấy danh sách các phần tử phù hợp dựa trên Tên lớp trong khi cú pháp thứ hai là chỉ lấy một phần tử phù hợp

Trong trường hợp phần tử có nhiều lớp thì chiến lược này sẽ khớp với từng lớp

Xem xét phần tử sau (nút gửi) trên DemoQAAutomationPracticeForm

Selenium JavaScript tìm phần tử theo lớp

Lệnh tương ứng để tìm phần tử được đánh dấu ở trên là

List elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));
1

Ghi chú. Tìm các phần tử bằng cách sử dụng chiến lược tên lớp rất hữu ích khi chúng tôi kết thúc với ID và tên không phải là duy nhất. Lúc đó, chúng tôi chỉ sử dụng chiến lược Tên lớp và cố gắng tìm các phần tử. Khi chúng ta sử dụng chiến lược Tên lớp, khi Selenium tìm thấy lớp cụ thể, nó sẽ tìm ID trong lớp được chỉ định

Chương trình tìm phần tử sử dụng By. className như dưới đây

List elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));
2

Chương trình này cho đầu ra sau

Selenium JavaScript tìm phần tử theo lớp

Trong chương trình này, chúng tôi đã cung cấp một tên lớp "nút" làm đối số Theo đối tượng trong cuộc gọi 'findElement()'. Nó quét trang và trả về một phần tử có className = "button"

Làm cách nào để tìm phần tử bằng thuộc tính "tên thẻ HTML" trong Selenium?

Chiến lược Tên thẻ sử dụng tên thẻ HTML để định vị phần tử. Chúng tôi hiếm khi sử dụng phương pháp này và chúng tôi chỉ sử dụng nó khi chúng tôi không thể tìm thấy các phần tử bằng bất kỳ chiến lược nào khác

Giá trị của thuộc tính TAG là một tham số kiểu String. Cú pháp của phương thức findElement() sử dụng chiến lược này như sau

List elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));
3

Như đã đề cập, lưu ý rằng chiến lược này không phổ biến lắm và chúng tôi chỉ sử dụng nó khi không có giải pháp thay thế nào khác để xác định vị trí phần tử

Để làm ví dụ, hãy xem xét phần tử sau trên DemoQAAutomationPracticeForm

Selenium JavaScript tìm phần tử theo lớp

Lệnh tương ứng cho phần tử trên (thẻ đầu vào) như bên dưới

List elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));
4

Sau đây là chương trình tìm phần tử bằng By. đối tượng tagName

List elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));
5

Đầu ra của chương trình này như được thấy dưới đây

Selenium JavaScript tìm phần tử theo lớp

Chương trình trên sử dụng By. đối tượng tagName trong cuộc gọi 'findElement()' để tìm phần tử dựa trên tagName = "input"

Làm cách nào để tìm một phần tử bằng "Bộ chọn CSS" trong Selenium?

Chúng ta cũng có thể sử dụng chiến lược Bộ chọn CSS làm đối số cho đối tượng By khi tìm phần tử. Vì Bộ chọn CSS có hỗ trợ trình duyệt gốc nên đôi khi chiến lược Bộ chọn CSS nhanh hơn chiến lược XPath

Một lần nữa, chúng tôi sẽ chọn một phần tử từ trang DemoQAAutomationPracticeForm

Selenium JavaScript tìm phần tử theo lớp

Bộ chọn CSS cho trường nhập ở trên là #firstName. Vì vậy, lệnh tương ứng để tìm phần tử bằng CSS Selector là

List elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));
6

Chương trình sau đây cho thấy cách tìm các phần tử bằng cách sử dụng By. cấu trúc cssSelector

List elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));
7

Chương trình cho đầu ra sau

Selenium JavaScript tìm phần tử theo lớp

Chương trình trên tìm một phần tử bằng CSS Selector cho trường 'firstNam'  bằng cách sử dụng By. chiến lược định vị cssSelector. Chương trình trả về một phần tử có bộ chọn CSS đã chỉ định

Làm cách nào để tìm một phần tử bằng cách sử dụng "XPath" trong Selenium?

Chiến lược này là chiến lược phổ biến nhất để tìm các phần tử. Sử dụng chiến lược này, chúng tôi điều hướng qua cấu trúc của tài liệu HTML hoặc XML

Chiến lược này chấp nhận tham số kiểu Chuỗi, Biểu thức XPath. Cú pháp chung của việc sử dụng chiến lược này như dưới đây

List elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));
8

Sử dụng XPath, chúng ta có thể xác định vị trí một phần tử bằng nhiều cách khác nhau. Nó cung cấp nhiều cách khác nhau và dễ dàng để định vị các phần tử

Để làm ví dụ, chúng ta hãy lấy phần tử sau trong trang DemoQAAutomationPracticeForm

Selenium JavaScript tìm phần tử theo lớp

XPath cho phần tử nút ở trên là [@id="submit"]. Vui lòng tham khảo Cách kiểm tra các phần tử bằng Trình kiểm tra web để biết thêm thông tin. Vì vậy, chúng tôi sử dụng nó trong lệnh findElement() như bên dưới

List elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));
9

Chương trình tìm phần tử sử dụng By. XPath như sau

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class FindElementByTagName {
   public static void main(String[] args) {
	   System.setProperty("webdriver.chrome.driver", "C:/testSelenium/chromedriver.exe");		

	   WebDriver driver = new ChromeDriver();

	   driver.get("https://demoqa.com/text-box/");
		
	   // Find elements using tag name
	   List allInputElements = driver.findElements(By.tagName("input"));
		
	   if(allInputElements.size() != 0) 
	   {
		   System.out.println(allInputElements.size() + " Elements found by TagName as input \n");
			
		   for(WebElement inputElement : allInputElements) 
		   {
			   System.out.println(inputElement.getAttribute("placeholder"));
		   }
	   }
   }
}
0

Chương trình này hiển thị đầu ra sau

Selenium JavaScript tìm phần tử theo lớp

Ở đây chúng tôi đã cung cấp XPath của nút "submit " làm đối số cho By. định vị xpath. Chương trình trả về phần tử khớp với XPath đã chỉ định

Làm cách nào để tìm một phần tử bằng cách sử dụng "Văn bản liên kết/Văn bản liên kết một phần" trong Selenium?

Chiến lược này tìm thấy các liên kết trong trang web. Nó đặc biệt tìm thấy các phần tử có liên kết. Điều này có nghĩa là chúng tôi có thể sử dụng chiến lược này để tìm các phần tử của thẻ "a" (liên kết) có tên liên kết phù hợp hoặc tên liên kết một phần

Chiến lược chấp nhận giá trị của thuộc tính LINKTEXT làm tham số kiểu Chuỗi

Cú pháp của findElement sử dụng chiến lược này như bên dưới

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class FindElementByTagName {
   public static void main(String[] args) {
	   System.setProperty("webdriver.chrome.driver", "C:/testSelenium/chromedriver.exe");		

	   WebDriver driver = new ChromeDriver();

	   driver.get("https://demoqa.com/text-box/");
		
	   // Find elements using tag name
	   List allInputElements = driver.findElements(By.tagName("input"));
		
	   if(allInputElements.size() != 0) 
	   {
		   System.out.println(allInputElements.size() + " Elements found by TagName as input \n");
			
		   for(WebElement inputElement : allInputElements) 
		   {
			   System.out.println(inputElement.getAttribute("placeholder"));
		   }
	   }
   }
}
1

Cú pháp trên là để tìm các phần tử sử dụng văn bản liên kết đầy đủ. Điều này được sử dụng khi chúng tôi biết văn bản liên kết được sử dụng trong thẻ neo (a)

Chúng tôi cũng có thể sử dụng liên kết một phần và tìm các phần tử. Sau đây là cú pháp

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class FindElementByTagName {
   public static void main(String[] args) {
	   System.setProperty("webdriver.chrome.driver", "C:/testSelenium/chromedriver.exe");		

	   WebDriver driver = new ChromeDriver();

	   driver.get("https://demoqa.com/text-box/");
		
	   // Find elements using tag name
	   List allInputElements = driver.findElements(By.tagName("input"));
		
	   if(allInputElements.size() != 0) 
	   {
		   System.out.println(allInputElements.size() + " Elements found by TagName as input \n");
			
		   for(WebElement inputElement : allInputElements) 
		   {
			   System.out.println(inputElement.getAttribute("placeholder"));
		   }
	   }
   }
}
2

Ở đây chúng tôi có thể cung cấp một phần tên liên kết

Ví dụ: chúng ta có thể lấy phần tử sau (DemoQAHomeLink ). Chúng tôi đã đánh dấu phần tử như hình bên dưới

Selenium JavaScript tìm phần tử theo lớp

Chúng tôi có thể sử dụng chiến lược liên kết nếu văn bản được nhắm mục tiêu là văn bản liên kết. Vì vậy, đối với phần tử liên kết ở trên, lệnh findElement() cho liên kết và chiến lược liên kết một phần như sau

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class FindElementByTagName {
   public static void main(String[] args) {
	   System.setProperty("webdriver.chrome.driver", "C:/testSelenium/chromedriver.exe");		

	   WebDriver driver = new ChromeDriver();

	   driver.get("https://demoqa.com/text-box/");
		
	   // Find elements using tag name
	   List allInputElements = driver.findElements(By.tagName("input"));
		
	   if(allInputElements.size() != 0) 
	   {
		   System.out.println(allInputElements.size() + " Elements found by TagName as input \n");
			
		   for(WebElement inputElement : allInputElements) 
		   {
			   System.out.println(inputElement.getAttribute("placeholder"));
		   }
	   }
   }
}
3

Trong ví dụ đầu tiên, chúng tôi sử dụng By. chiến lược linkText và cung cấp toàn bộ 'linkname'. Điều này sẽ tìm kiếm một liên kết với từ "Trang chủ". Trong ví dụ thứ hai, chúng tôi sử dụng By. một phầnLinkText và chỉ cung cấp một phần của 'tên liên kết' ('HomehY'). Vì đây là liên kết một phần nên nó sẽ tìm các liên kết bắt đầu bằng 'HomehY'. Như được hiển thị ở trên, có một liên kết 'HomehYtil' trên trang. Vậy nên. partLinkText sẽ tìm thấy liên kết này

Hãy để chúng tôi triển khai mã để tìm phần tử bằng By. liên kếtVăn bản/Bởi. một phầnLinkText

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class FindElementByTagName {
   public static void main(String[] args) {
	   System.setProperty("webdriver.chrome.driver", "C:/testSelenium/chromedriver.exe");		

	   WebDriver driver = new ChromeDriver();

	   driver.get("https://demoqa.com/text-box/");
		
	   // Find elements using tag name
	   List allInputElements = driver.findElements(By.tagName("input"));
		
	   if(allInputElements.size() != 0) 
	   {
		   System.out.println(allInputElements.size() + " Elements found by TagName as input \n");
			
		   for(WebElement inputElement : allInputElements) 
		   {
			   System.out.println(inputElement.getAttribute("placeholder"));
		   }
	   }
   }
}
4

Đầu ra

Selenium JavaScript tìm phần tử theo lớp

Chương trình này tìm một phần tử bằng cách sử dụng By. linkText và By. bộ định vị một phầnLinkText. khi nào. linkText được chỉ định, 'findElement' khớp với toàn bộ linkText được chỉ định. Nó khớp với một phần văn bản khi By. một phầnLinkText được chỉ định

Sự khác biệt giữa tìm phần tử và tìm phần tử trong Selenium

Hãy để chúng tôi thảo luận về một số khác biệt giữa các phương thức findElement() và findElements() được cung cấp bởi Selenium WebDriver

FindElement()FindElements()Trả về phần tử web đầu tiên trong số tất cả các phần tử được tìm thấy bởi cùng một bộ định vị. Tìm và trả về danh sách các phần tử web. Phương pháp này chỉ tìm thấy một phần tử. Phương thức này trả về tập hợp các phần tử khớp với bộ định vị. Nếu không có phần tử nào khớp với bộ định vị, một ngoại lệ “NoSuchElementException” sẽ được ném ra. Không có ngoại lệ nào được ném ra nếu không tìm thấy phần tử phù hợp. Chỉ cần trả về một danh sách trống. NKhông cần lập chỉ mục vì chỉ có một phần tử được trả về. Mỗi phần tử web được lập chỉ mục bắt đầu từ 0

Chìa khóa TakeAway

Chúng tôi cần tìm hoặc xác định vị trí các phần tử web trong trang web để chúng tôi có thể thực hiện các hành động trên các phần tử này

Ngoài ra, chúng ta có hai phương thức find Element và find Elements trong Selenium WebDriver bằng cách sử dụng chúng ta có thể xác định vị trí các phần tử

Ngoài ra, phương thức findElement() trong Selenium trả về một phần tử web duy nhất từ ​​trang web

Phương thức findElements() trong Selenium trả về một danh sách các phần tử web

Cuối cùng, để định vị hoặc tìm các phần tử, mỗi phương thức sử dụng chiến lược định vị được cung cấp thông qua một đối số cho đối tượng "By". Các chiến lược này là theo Id, theo Tên, theo Tên lớp, theo XPath, theo liên kết, v.v.

Làm cách nào để tìm một phần tử theo lớp trong Selenium?

phương thức class() . Phương thức này cho phép xác định vị trí một phần tử bằng cách tham chiếu tên lớp của nó. Phương thức class() được tìm thấy bên trong lớp By của thư viện JavaScript Selenium WebDriver.

Làm cách nào để lấy một phần tử theo tên lớp trong JavaScript?

Cú pháp như sau. var elements = document. getElementsByClassName(name); Ở đây “name” là tên lớp mà bạn đang muốn tìm và “elements” là một biến chứa mảng các phần tử.

Làm cách nào để tìm XPath theo lớp?

Chuyển đến tab Tên và nhấp chuột phải >> Kiểm tra . Khi kiểm tra phần tử web, nó sẽ hiển thị thẻ đầu vào và các thuộc tính như lớp và id. Sử dụng id và các thuộc tính này để xây dựng XPath, do đó, sẽ định vị trường tên.

Làm cách nào để tìm các phần tử bằng bộ chọn CSS?

Nhập “css=input[type='submit']” (giá trị định vị) trong Selenium IDE. Bấm vào nút Tìm. Nút “Đăng nhập” sẽ được tô sáng, xác minh giá trị của bộ định vị. Thuộc tính. Được sử dụng để tạo Bộ chọn CSS