Locators trong Selenium IDE: CSS Selector | DOM | XPath | id

Locators là gì?

Locators là một lệnh cho Selenium IDE biết phần tử GUI nào (chẳng hạn như Text Box, Buttons, Check Boxes v.v.) cần hoạt động trên đó. Việc xác định các phần tử GUI chính xác là điều kiện tiên quyết để tạo một tập lệnh tự động hóa. Nhưng việc xác định chính xác các yếu tố GUI khó hơn nhiều so với âm thanh. Đôi khi, bạn làm việc với các phần tử GUI không chính xác hoặc không có phần tử nào cả! Do đó, Selenium cung cấp một số  Locators để Locators chính xác phần tử GUI

Tập lệnh ví dụ selenium Webdriver Scrip

Các loại CSS Locator khác nhau trong Selenium IDE

Có những lệnh không cần  Locators (chẳng hạn như lệnh “mở”). Tuy nhiên, hầu hết chúng đều cần  Locators phần tử trong Selenium webdriver.

Việc lựa chọn công cụ Locators phụ thuộc phần lớn vào Ứng dụng Đang Thử nghiệm của bạn . Trong hướng dẫn này, chúng tôi sẽ chuyển đổi giữa Faceok, các tour.demoaut mới trên cơ sở  Locators mà các ứng dụng này hỗ trợ. Tương tự như vậy trong dự án Thử nghiệm của bạn , bạn sẽ chọn bất kỳ trình Locators phần tử nào được liệt kê ở trên trong Selenium webdriver, dựa trên hỗ trợ ứng dụng của bạn.

Locators bằng ID

Đây là cách phổ biến nhất để Locators các phần tử vì ID được cho là duy nhất cho mỗi phần tử.

Định dạng mục tiêu: id = id của phần tử

Đối với ví dụ này, chúng tôi sẽ sử dụng Faceok làm ứng dụng thử nghiệm của mình vì Mercury Tours không sử dụng thuộc tính ID.

Bước 1. Kể từ khi hướng dẫn này được tạo, Faceok đã thay đổi Thiết kế Trang Đăng nhập của họ. Sử dụng trang demo này http://demo.guru99.com/test/faceok.html để thử nghiệm. Kiểm tra hộp văn bản “Email hoặc Điện thoại” bằng Firebug và ghi lại ID của nó. Trong trường hợp này, ID là “email”.

Bước 2. Khởi chạy Selenium IDE và nhập “id = email” vào hộp Target. Nhấp vào nút Tìm và nhận thấy rằng hộp văn bản “Email hoặc Điện thoại” được đánh dấu bằng màu vàng và được viền bằng màu xanh lục, có nghĩa là, Selenium IDE đã có tag Locators phần tử đó một cách chính xác.

Cách sử dụng Bộ định vị trong Selenium IDE

Locators tago tên

Locators các phần tử tago tên rất giống với Locators tago ID, ngoại trừ việc chúng tôi sử dụng tiền tố “name =” để thay tag.

Định dạng mục tiêu: name = tên của phần tử

Trong phần minh họa sau đây, bây giờ chúng ta sẽ sử dụng Mercury Tours vì tất cả các yếu tố quan trọng đều có tên.

Bước 1. Điều hướng đến http://demo.guru99.com/test/newtours/ và sử dụng Firebug để kiểm tra hộp văn bản “Tên người dùng”. Hãy lưu ý đến thuộc tính tên của nó.

Ở đây, chúng ta thấy rằng tên của phần tử là “userName”.

Bước 2. Trong Selenium IDE, nhập “name = userName” vào hộp Target và nhấp vào nút Find. Selenium IDE sẽ có tag Locators hộp văn bản Tên người dùng bằng cách tô sáng nó.

Locators theo tên bằng bộ lọc

lọc có tag được sử dụng khi nhiều phần tử có cùng tên.  lọc là các thuộc tính  sung được sử dụng để phân biệt các phần tử có cùng tên.

Định dạng mục tiêu : name = name_of_tag_element filter = value_of_filter

Hãy xem một ví dụ –

Bước 1 . Đăng nhập vào Mercury Tours bằng cách sử dụng “hướng dẫn” làm tên người dùng và mật khẩu. Nó sẽ đưa bạn đến trang Tìm chuyến bay được hiển thị bên dưới.

Bước 2. Sử dụng Firebug, lưu ý rằng các nút radio Round Trip và One Way có cùng tên “tripType”. Tuy nhiên, chúng có các thuộc tính GIÁ TRỊ khác nhau nên chúng tôi có tag sử dụng từng thuộc tính này làm  lọc của mình.

Bước 3.

  • Trước tiên, chúng ta sẽ truy cập vào nút radio One Way. Nhấp vào dòng đầu tiên trên Trình chỉnh sửa.
  • Trong hộp lệnh của Selenium IDE, nhập lệnh “nhấp vào”.
  • Trong hộp Mục tiêu, nhập “name = tripType value = oneway”. Phần “value = oneway” là  lọc của chúng tôi.

Bước 4 . Nhấp vào nút Tìm và nhận thấy rằng Selenium IDE có tag đánh dấu nút radio Một chiều bằng màu xanh lục – nghĩa là chúng tôi có tag truy cập thành công phần tử bằng cách sử dụng thuộc tính VALUE của nó.

Bước 5. Nhấn phím “X” trên bàn phím của bạn để thực hiện lệnh nhấp chuột này. Lưu ý rằng nút radio One Way đã được chọn.

Bạn có tag làm điều tương tự chính xác với nút radio one way, lần này, sử dụng “name = tripType value = roundtrip” làm mục tiêu của bạn.

Locators bằng văn bản liên kết

Loại Locators CSS này trong Selenium chỉ áp dụng cho các văn bản siêu liên kết. Chúng tôi truy cập liên kết bằng cách đặt trước mục tiêu của chúng tôi bằng “link =” và sau đó là văn bản siêu liên kết.

Định dạng mục tiêu : link = link_text

Trong ví dụ này, chúng tôi sẽ truy cập liên kết “ĐĂNG KÝ” có trên trang chủ của Mercury Tours.

Bước 1.

  • Trước tiên, hãy đảm bảo rằng bạn đã đăng xuất khỏi Mercury Tours.
  • Truy cập trang chủ của Mercury Tours.

Bước 2 .

  • Sử dụng Firebug, kiểm tra liên kết “ĐĂNG KÝ”. Văn bản liên kết được tìm thấy giữa và các tag.
  • Trong trường hợp này, văn bản liên kết của chúng tôi là “ĐĂNG KÝ”. Sao chép văn bản liên kết.

Bước 3 . Sao chép văn bản liên kết trong Firebug và dán nó vào hộp Target của Selenium IDE. Tiền tố nó bằng “link =”.

Bước 4. Nhấp vào nút Tìm và nhận thấy rằng Selenium IDE đã có tag đánh dấu liên kết ĐĂNG KÝ một cách chính xác.

Bước 5. Để xác minh tagm, hãy nhập “clickAndWait” vào hộp Lệnh và thực hiện nó. Selenium IDE sẽ có tag nhấp vào liên kết ĐĂNG KÝ đó thành công và đưa bạn đến trang Đăng ký được hiển thị bên dưới.

Locators bằng  chọn CSS

 chọn CSS trong Selenium là các mẫu chuỗi được sử dụng để xác định một phần tử dựa trên sự kết hợp của tag HTML, id, class và thuộc tính. Locators bằng  chọn CSS trong Selenium phức tạp hơn các phương pháp trước đó, nhưng đây là chiến lược Locators phổ biến nhất của người dùng Selenium nâng cao vì nó có tag truy cập ngay cả những phần tử không có ID hoặc tên.

 chọn CSS trong Selenium có nhiều định dạng, nhưng chúng tôi sẽ chỉ tập trung vào những định dạng phổ biến nhất.

  • tag và ID
  • Gắn tag và class 
  • tag và thuộc tính
  • tag, class và thuộc tính
  • Văn bản bên trong

Khi sử dụng chiến lược này, chúng tôi luôn đặt trước hộp Mục tiêu bằng “css =” như sẽ được hiển thị trong các ví dụ sau.

Locators bằng  chọn CSS – tag và ID

Một lần nữa, chúng tôi sẽ sử dụng hộp văn bản Email của Faceok trong ví dụ này. Như bạn có tag nhớ, nó có một ID là “email” và chúng tôi đã truy cập nó trong phần “Locators bằng ID”. Lần này, chúng ta sẽ sử dụng Selenium CSS Selector có ID để truy cập vào chính phần tử đó.

Cú phápSự miêu tả
css = tag # idtag = tag HTML của phần tử đang được truy cập# = dấu thăng. Điều này phải luôn xuất hiện khi sử dụng  chọn CSS Selenium có IDid = ID của phần tử đang được truy cập

Hãy nhớ rằng ID luôn đứng trước dấu thăng (#).

Bước 1. Điều hướng đến www.faceok.com . Sử dụng Firebug, kiểm tra hộp văn bản “Email hoặc Điện thoại”.

Tại thời điểm này, hãy lưu ý rằng tag HTML là “đầu vào” và ID của nó là “email”. Vì vậy, cú pháp của chúng ta sẽ là “css = input # email”.

Bước 2. Nhập “css = input # email” vào ô Target của Selenium IDE và nhấp vào nút Find. Selenium IDE sẽ có tag làm nổi bật phần tử đó.

Locators bằng  chọn CSS – tag và class 

Locators bằng  chọn CSS trong Selenium bằng cách sử dụng tag HTML và tên class tương tự như cách sử dụng tag và ID, nhưng trong trường hợp này, dấu chấm (.) Được sử dụng thay vì dấu thăng.

Cú phápSự miêu tả
css = tag . class tag = tag HTML của phần tử đang được truy cập. = dấu chấm. Điều này phải luôn xuất hiện khi sử dụng  chọn CSS với class class  = class của phần tử đang được truy cập

Bước 1. Truy cập trang demo http://demo.guru99.com/test/faceok.html và sử dụng Firebug để kiểm tra hộp văn bản “Email hoặc Điện thoại”. Lưu ý rằng tag HTML của nó là “input” và class của nó là “inputtext.”

Bước 2. Trong Selenium IDE, nhập “css = input.inputtext” vào hộp Target và nhấp vào Find. Selenium IDE sẽ có tag nhận dạng hộp văn bản Email hoặc Điện thoại.

Lưu ý rằng khi nhiều phần tử có cùng tag và tên HTML, thì chỉ phần tử đầu tiên trong mã nguồn mới được nhận dạng . Sử dụng Firebug, kiểm tra hộp văn bản Mật khẩu trong Faceok và nhận thấy rằng nó có cùng tên với hộp văn bản Email hoặc Điện thoại.

Lý do tại sao chỉ có hộp văn bản Email hoặc Điện thoại được đánh dấu trong hình minh họa trước là vì nó xuất hiện đầu tiên trong nguồn trang của Faceok.

Locators bằng  chọn CSS – tag và Thuộc tính

Chiến lược này sử dụng tag HTML và một thuộc tính cụ tag của phần tử được truy cập.

Cú phápSự miêu tả
css = tag [attribute=value]tag = tag HTML của phần tử đang được truy cập[and] = dấu ngoặc vuông trong đó một thuộc tính cụ tag và giá trị tương ứng của nó sẽ được đặtthuộc tính = thuộc tính được sử dụng. Bạn nên sử dụng thuộc tính duy nhất cho phần tử như tên hoặc ID.value = giá trị tương ứng của thuộc tính đã chọn.

Bước 1. Điều hướng đến trang Đăng ký của Mercury Tours ( http://demo.guru99.com/test/newtours/register.php ) và kiểm tra hộp văn bản “Họ”. Hãy lưu ý đến tag HTML (“input” trong trường hợp này) và tên của nó (“lastName”).

Bước 2. Trong Selenium IDE, nhập “css = input [name = lastName]” vào hộp Target và nhấp vào Find. Selenium IDE sẽ có tag truy cập thành công hộp Họ.

Khi nhiều phần tử có cùng một tag và thuộc tính HTML, thì chỉ phần tử đầu tiên mới được nhận dạng . Hành vi này tương tự như việc Locators các phần tử bằng cách sử dụng  chọn CSS có cùng tag và class .

Locators bằng  chọn CSS – tag, class và thuộc tính

Cú phápSự miêu tả
css = tag.class  [attribute=value]tag = tag HTML của phần tử đang được truy cập. = dấu chấm. Điều này phải luôn xuất hiện khi sử dụng  chọn CSS với class class  = class của phần tử đang được truy cập[and] = dấu ngoặc vuông trong đó một thuộc tính cụ tag và giá trị tương ứng của nó sẽ được đặtthuộc tính = thuộc tính được sử dụng. Bạn nên sử dụng thuộc tính duy nhất cho phần tử như tên hoặc ID.value = giá trị tương ứng của thuộc tính đã chọn.

Bước 1. Truy cập trang demo http://demo.guru99.com/test/faceok.html và sử dụng Firebug để kiểm tra hộp nhập ‘Email hoặc Điện thoại’ và ‘Mật khẩu’. Lưu ý về tag HTML, class và thuộc tính của chúng. Đối với ví dụ này, chúng tôi sẽ chọn các thuộc tính ‘tabindex’ của chúng.

Bước 2.  Trước tiên, chúng ta sẽ truy cập vào hộp văn bản ‘Email hoặc Điện thoại’. Do đó, chúng tôi sẽ sử dụng giá trị tabindex là 1. Nhập “css = input.inputtext [tabindex = 1]” vào hộp Target của Selenium IDE và nhấp vào Find. Hộp nhập ‘Email hoặc Điện thoại’ sẽ được đánh dấu.

Bước 3. Để truy cập hộp nhập Mật khẩu, chỉ cần thay tag giá trị của thuộc tính tabindex. Nhập “css = input.inputtext [tabindex = 2]” vào hộp Target và nhấp vào nút Find. Selenium IDE phải có tag xác định thành công hộp văn bản Mật khẩu.

Locators bằng  chọn CSS – văn bản bên trong

Như bạn có tag nhận thấy, các nhãn HTML hiếm khi được cung cấp các thuộc tính id, tên hoặc class . Vì vậy, làm tag nào để chúng tôi truy cập chúng? Câu trả lời là thông qua việc sử dụng các văn bản bên trong của họ. Văn bản bên trong là các mẫu chuỗi thực tế mà nhãn HTML hiển thị trên trang.

Cú phápSự miêu tả
css = tag : chứa (” văn bản bên trong “)tag = tag HTML của phần tử đang được truy cậpvăn bản bên trong = văn bản bên trong của phần tử

Bước 1. Điều hướng đến trang chủ của Mercury Tours ( http://demo.guru99.com/test/newtours/ ) và sử dụng Firebug để điều tra nhãn “Mật khẩu”. Hãy lưu ý đến tag HTML của nó (trong trường hợp này là “phông chữ”) và lưu ý rằng nó không có thuộc tính class , id hoặc tên.

Bước 2.css = font: chứa (“Mật khẩu:”) vào hộp Target của Selenium IDE và nhấp vào Tìm. Selenium IDE sẽ có tag truy cập vào nhãn Mật khẩu như trong hình bên dưới.

Bước 3. Lần này, thay tag văn bản bên trong bằng “ston” để Mục tiêu của bạn bây giờ sẽ trở thành “css = font: chứa (” ston “)”. Nhấp vào Tìm. Bạn sẽ nhận thấy rằng nhãn “ston đến San Francisco” được tô sáng. Điều này cho bạn thấy rằng Selenium IDE có tag truy cập một nhãn dài ngay cả khi bạn chỉ chỉ ra từ đầu tiên của văn bản bên trong của nó.

Locators bằng DOM (Mô hình đối tượng tài liệu)

Nói một cách đơn giản, Mô hình Đối tượng Tài liệu (DOM) là cách mà các phần tử HTML được cấu trúc. Selenium IDE có tag sử dụng DOM trong việc truy cập các phần tử của trang. Nếu chúng ta sử dụng phương pháp này, hộp Target của chúng ta sẽ luôn bắt đầu bằng “dom = document …”; tuy nhiên, tiền tố “dom =” thường bị loại  vì Selenium IDE có tag tự động diễn giải bất kỳ thứ gì bắt đầu bằng từ khóa “document” thành một đường dẫn trong DOM trong Selenium.

Có n cách cơ bản để Locators một phần tử thông qua DOM trong Selenium:

  • getElementById
  • getElementsByName
  • dom: name (chỉ áp dụng cho các phần tử trong một biểu mẫu được đặt tên)
  • dom: chỉ mục

Locators bằng DOM – getElementById

Chúng ta hãy tập trung vào phương pháp đầu tiên – sử dụng phương thức getElementById của DOM trong Selenium. Cú pháp sẽ là:

Cú phápSự miêu tả
document.getElementById (” id của phần tử “)id của phần tử = đây là giá trị của thuộc tính ID của phần tử được truy cập. Giá trị này phải luôn được đặt trong một cặp dấu ngoặc đơn (“”).

Bước 1. Sử dụng trang demo này http://demo.guru99.com/test/faceok.html Điều hướng đến nó và sử dụng Firebug để kiểm tra hộp kiểm “Giữ cho tôi đăng nhập”. Ghi lại ID của nó.

Chúng ta có tag thấy rằng ID mà chúng ta nên sử dụng là “pers_x”.

Bước 2. Mở Selenium IDE và trong hộp Target, nhập “document.getElementById (” pers_x “)” và nhấp vào Tìm. Selenium IDE sẽ có tag Locators hộp kiểm “Giữ cho tôi đăng nhập”. Mặc dù nó không tag làm nổi bật bên trong hộp kiểm, Selenium IDE vẫn có tag bao quanh phần tử bằng một đường viền màu xanh lá cây tươi sáng như hình dưới đây.

Locators bằng DOM – getElementsByName

Phương thức getElementById chỉ có tag truy cập một phần tử tại một thời điểm và đó là phần tử có ID mà bạn đã chỉ định. Phương thức getElementsByName thì khác. Nó thu thập một mảng các phần tử có tên mà bạn đã chỉ định. Bạn truy cập các phần tử riêng lẻ bằng cách sử dụng chỉ mục bắt đầu từ 0.

 Cách sử dụng Bộ định vị trong Selenium IDE  getElementByIdNó sẽ chỉ nhận được một phần tử cho bạn.Phần tử đó mang ID mà bạn đã chỉ định bên trong dấu ngoặc đơn của getElementById ().
Cách sử dụng Bộ định vị trong Selenium IDE  getElementsByNameNó sẽ nhận được một tập hợp các phần tử có tên giống nhau.Mỗi phần tử được lập chỉ mục với một số bắt đầu từ 0 giống như một mảngBạn chỉ định phần tử nào bạn muốn truy cập bằng cách đặt số chỉ mục của nó vào dấu ngoặc vuông trong cú pháp của getElementsByName bên dưới.
Cú phápSự miêu tả
document.getElementsByName (” name “) [ index ]name = tên của phần tử như được xác định i thuộc tính ‘name’ của nóindex = một số nguyên cho biết phần tử nào trong mảng của getElementsByName sẽ được sử dụng.

Bước 1. Điều hướng đến Trang chủ của Mercury Tours và đăng nhập bằng cách sử dụng “hướng dẫn” làm tên người dùng và mật khẩu. Firefox sẽ đưa bạn đến màn hình Tìm kiếm chuyến bay.

Bước 2. Sử dụng Firebug, kiểm tra ba nút radio ở phần dưới cùng của trang (các nút radio hạng Phổ thông, hạng Thương gia và hạng Nhất). Lưu ý rằng tất cả chúng đều có cùng một tên là “servclass “.

Bước 3. Trước tiên, hãy để chúng tôi truy cập vào nút radio “Hạng phổ thông”. Trong tất cả ba nút radio này, phần tử này đứng trước, vì vậy nó có chỉ số là 0. Trong Selenium IDE, nhập “document.getElementsByName (” servclass  “) [0]” và nhấp vào nút Tìm. Selenium IDE sẽ có tag xác định chính xác nút radio hạng Phổ thông.

Bước 4. Thay đổi số chỉ mục thành 1 để Target của bạn bây giờ sẽ trở thành document.getElementsByName (“servclass “) [1]. Nhấp vào nút Tìm và Selenium IDE sẽ có tag đánh dấu nút radio “Hạng thương gia”, như được hiển thị bên dưới.

Locators bằng DOM – dom: name

Như đã đề cập trước đó, phương pháp này sẽ chỉ áp dụng nếu phần tử bạn đang truy cập được chứa trong một biểu mẫu được đặt tên.

Cú phápSự miêu tả
document.forms [” name of the form “] .elements [” name of the elêmnts “]tên của biểu mẫu = giá trị của thuộc tính tên của tag biểu mẫu có chứa phần tử bạn muốn truy cậptên của phần tử = giá trị của thuộc tính name của phần tử bạn muốn truy cập

Bước 1. Điều hướng đến trang chủ Mercury Tours và sử dụng Firebug để kiểm tra hộp văn bản Tên người dùng. Lưu ý rằng nó được chứa trong một biểu mẫu có tên là “nhà”.

Bước 2. Trong Selenium IDE, gõ “document.forms [” home “]. Elements [” userName “]” và nhấp vào nút Tìm. Selenium IDE phải có tag truy cập phần tử thành công.

Locators bằng DOM – dom: index

Phương pháp này áp dụng ngay cả khi phần tử không nằm trong biểu mẫu được đặt tên vì nó sử dụng chỉ mục của biểu mẫu chứ không phải tên của nó.

Cú phápSự miêu tả
document.forms[index of the form] .elements [index of the element]chỉ mục của biểu mẫu = số chỉ mục (bắt đầu từ 0) của biểu mẫu liên quan đến toàn  trangchỉ mục của phần tử = số chỉ mục (bắt đầu từ 0) của phần tử đối với toàn  dạng chứa nó

Chúng tôi sẽ truy cập hộp văn bản “Điện thoại” trong trang Đăng ký của Mercury Tours. Biểu mẫu trong trang đó không có tên và thuộc tính ID, vì vậy đây sẽ là một ví dụ điển hình.

Bước 1. Điều hướng đến trang Đăng ký Mercury Tours và chọn hộp văn bản Điện thoại. Lưu ý rằng biểu mẫu chứa nó không có thuộc tính ID và tên.

Bước 2. Nhập “document.forms [0] .elements [3]” vào hộp Target của Selenium IDE và nhấp vào nút Tìm. Selenium IDE sẽ có tag truy cập hộp văn bản Điện thoại một cách chính xác.

Bước 3. Ngoài ra, bạn có tag sử dụng tên của phần tử thay vì chỉ mục của nó và thu được kết quả tương tự. Nhập “document.forms [0] .elements [” phone “]” vào hộp Target của Selenium IDE. Hộp văn bản Điện thoại sẽ vẫn được đánh dấu.

Locators bằng XPath

XPath là ngôn ngữ được sử dụng khi Locators các nút XML (Ngôn ngữ Đánh dấu Mở rộng). Vì HTML có tag được coi là một triển khai của XML, chúng ta cũng có tag sử dụng XPath để Locators các phần tử HTML.

        Ưu điểm: Nó có tag truy cập hầu hết mọi phần tử, ngay cả những phần tử không có thuộc tính class , tên hoặc id.

        Nhược điểm: Đây là phương pháp xác định các yếu tố phức tạp nhất vì có quá nhiều quy tắc và sự cân nhắc khác nhau.

May mắn thay, Firebug có tag tự động tạo  Locators XPath Selenium. Trong ví dụ sau, chúng ta sẽ truy cập một hình ảnh không tag truy cập được thông qua các phương pháp mà chúng ta đã thảo luận trước đó.

Bước 1. Điều hướng đến Trang chủ của Mercury Tours và sử dụng Firebug để kiểm tra hình chữ nhật màu cam ở bên phải của hộp “Liên kết” màu vàng. Tham khảo hình ảnh bên dưới.

Bước 2 . Nhấp chuột phải vào mã HTML của phần tử và sau đó chọn tùy chọn “Sao chép XPath”.

Bước 3. Trong Selenium IDE, gõ một dấu gạch chéo “/” vào hộp Target sau đó dán XPath mà chúng ta đã sao chép ở bước trước. Mục nhập trong hộp Mục tiêu của bạn bây giờ sẽ bắt đầu bằng hai dấu gạch chéo về phía trước “//”.

Bước 4 . Bấm vào nút Tìm. Selenium IDE sẽ có tag làm nổi bật hộp màu cam như hình dưới đây.

Tóm lược

Cú pháp cho việc sử dụng  Locators

phương phápCú pháp đíchThí dụ
tago IDid = id_of_tag_elementid = email
Bằng tênname = name_of_tag_elementname = userName
tago tên bằng cách sử dụng  lọcname = name_of_tag_element filter = value_of_filtername = tripType value = oneway
Bằng văn bản liên kếtlink = link_textlink = ĐĂNG KÝ
tag và IDcss = tag # idcss = input # email
Tag và class css = tag . class css = input.inputtext
tag và thuộc tínhcss = tag [attribute=value]css = input [name = lastName]
tag, class và Thuộc tínhcss = tag . class [attribute=value]
Back to top button