Bộ chọn css thủ thuật css
Khi bắt đầu tìm hiểu và tìm hiểu về Selenium Webdriver, mình thấy rất nhiều sách chỉ ra các cách để xác định vị trí của các phần tử trên trang web, đọc muốn hoa mắt và cảm thấy rất mơ hồ. Ngày đó, mình thấy ai cũng dạy là tìm theo thứ tự id, tên, lớp… cuối cùng là CSS và Xpath, nên những project demo của mình lúc nào thì cứ id và tên mà phang, sau đó là Xpath, còn CSS thì . Sau này, khi đọc nhiều hơn về Selenium Webdriver, mới thấy là trước đây mình chỉ hiểu cái bề mặt, thật ra chỉ có 2 loại chính là CSS Selector và Xpath Selector. In sao lại như vậy??? . 😀
Nội dung bài viết Show
I. Vậy bộ chọn CSS là gì?1 bộ chọn CSS là 1 chuỗi String được thiết kế để xác định 1 hay nhiều phần tử trên 1 trang web bằng cách sử dụng các thuộc tính và / hoặc sử dụng thứ tự cha – con của các phần tử trong DOM Đây là phần tử xác định API do Selenium Webdriver cung cấp
Đọc định nghĩa về CSS Selector ở trên và xem danh sách API, thì thấy có vẻ như đúng là chỉ có 2 loại. CSS và XPath vì Id, class, name, Tag… là các thuộc tính của 1 Element. Khi gọi các phương thức trên, các chất đều được chuyển đến CssSelector Nếu chỉ có 2 loại thì sao Selenium Webdriver lại cung cấp nhiều API thế kia? II. Cách CSS xác định 1 phần tửMô tả các trường hợp dưới đây đều sử dụng trang web này. https. //letkodeit. có thể dạy được. com/p/thực hành 1. Specify the IDTrong hầu hết các trường hợp, sử dụng ID (nếu có) là lựa chọn số 1. If used CSS Selector, it is. ______12 findElement(By.id("carselect")) = findElement(By.CssSelector("#carselect")) Tất nhiên là có 1 vài ngoại lệ…(đùa, cái gì cũng có ngoại lệ, học ghê gớm). Đó là khi Dev dùng 1 ID cho 2 phần tử khác nhau, làm lỗi lập trình, chứ không phải là cố ý. Hoặc là việc sử dụng ID động chứ không phải ID tĩnh. ID động là định dạng ID sẽ thay đổi sau mỗi lần tải trang, nó có định dạng Để xử lý cái “món nợ” này, thì có 2 cách và sẽ được nói ở phía dưới
2. Xác định theo các thuộc tínhMột thuộc tính về cơ bản là 1 tính chất của 1 phần tử. Và 1 phần tử thì có rất nhiều loại tính chất khác nhau. Ví dụ Những thuộc tính này có thể được xác định bằng cách viết sau [name ='enter-name'] findElement(By.name("enter-name")) = findElement(By.CssSelector("[name ='enter-name']")) Tất nhiên là sẽ có những trường hợp mà nếu chỉ sử dụng 1 thuộc tính thì không thể xác định được vị trí của phần tử đó vì nó có nhiều phần tử được đánh dấu giống nhau. Ví dụ Ta chỉ cần thêm thuộc tính thông tin là xong ________số 8Nếu muốn rõ ràng hơn, ta có thể thêm thẻ của phần tử đó input[name="point"][value="2"] Như đã nói ở trên, CSS Selector còn cung cấp 1 số tính năng của ký tự đại diện, chẳng hạn như khớp với đoạn đầu, đoạn cuối và vị trí bất kỳ ^= (khớp với đoạn đầu) 0$= (khớp với đoạn cuối) findElement(By.id("carselect")) = findElement(By.CssSelector("#carselect"))0 *= (khớp với bất kỳ vị trí) findElement(By.id("carselect")) = findElement(By.CssSelector("#carselect"))1 Và ta cũng có thể nối những cái này với nhau findElement(By.id("carselect")) = findElement(By.CssSelector("#carselect"))2 3. Xác định tên lớpHầu hết các phần tử đều có 1 lớp thuộc tính, trong đó có các giá trị lớp ngăn cách nhau bằng 1 khoảng trống, class=”class1 class2 class3″ findElement(By.id("carselect")) = findElement(By.CssSelector("#carselect"))3 To match with element which using class, t use cú pháp findElement(By.id("carselect")) = findElement(By.CssSelector("#carselect"))4 Tuy nhiên, dùng với class thì không an toàn, vì class thông thường để tạo kiểu cho 1 nhóm nhiều phần tử. Kiểm tra ví dụ trên, ta sẽ thấy có 5 kết quả trả về 4. Xác định theo hệ thống phân cấpXác định theo Hierarchy là kiểu đi theo dạng thác nước, có vẻ giống với Xpath, đi từ trên xuống dưới, khá phức tạp. Nhưng đôi khi các thuộc tính không đủ để xác định, ta buộc phải sử dụng nó a. Ví dụ 1findElement(By.id("carselect")) = findElement(By.CssSelector("#carselect"))5 Cú pháp của nó sẽ là findElement(By.id("carselect")) = findElement(By.CssSelector("#carselect"))6 Giả sử trong ví dụ trên, ta muốn lấy cái nhãn có chứa Justin, ta phải sử dụng 1 thuộc tính để xác định được thằng cha của nó rồi mới đi tới nó. Giữa 2 cha con có 1 khoảng trống Bộ chọn CSS lúc đó sẽ là findElement(By.id("carselect")) = findElement(By.CssSelector("#carselect"))7 b. Ví dụ 2findElement(By.id("carselect")) = findElement(By.CssSelector("#carselect"))8 Trong selector này, mình muốn tìm 1 5. Specify the orderTrong hầu hết các trường hợp liên quan đến danh sách dữ liệu, ta đều phải xử lý bằng các xác định thứ tự của họ trong danh sách đấy Ví dụ findElement(By.id("carselect")) = findElement(By.CssSelector("#carselect"))9 Muốn trỏ tới vị trí nào, chúng ta chỉ cần thêm 0Ví dụ, ta muốn trỏ tới vị trí số 2 “Orange”, bộ chọn của chúng ta sẽ là 16. Kỹ thuật CSS Selector cho trường hợp khóĐôi khi bạn thử những cách trên riêng rẽ, bạn sẽ thấy nó sẽ khớp với nhiều hơn 1 nút. Do đó, ta cần phải thêm điều kiện để nó chỉ khớp đúng 1 nốt duy nhất. Hãy đọc bài này để biết cách xử lý III. Làm thế nào để biết mình đã lấy đúng bộ chọn CSS?Bật Chrome > Kiểm tra Sau đó trỏ chuột vào phần tử, nhấn CTRL + F, nó sẽ xuất hiện dưới dạng hình Bạn hãy thử CSS Selector vào khung kia để kiểm tra kết quả. Chúc vui vẻ Nếu có bất cứ điều gì thắc mắc, hãy để lại bình luận nhé Bài viết có lấy tư liệu từ bài https. // thanh tra ma. com/blog/css-selector-strategies-automated-browser-testing/ |