Get all values dropdown selenium - lấy các giá trị của dropdown

Nhân dịp tối qua support một em về việc get values dropdown dùng selenium và java nên hôm nay mình sẽ note lại tips này vào đây.
Có thể các bạn đã từng đọc qua các bài viết kiểu này ở đâu đó, nhưng hôm nay dropdown của chúng ta không phải là 1 dropdown truyền thống.

Mục tiêu của tips này là chúng ta học được cách lấy xpath cho các element động và cách dùng 1 hàm theo kiểu OOP (thay vì viết chung vào thì tách thành class riêng cho tiện quản lý)

  1. trước tiên chúng ta hãy vào link sau https://www.sytner.co.uk/car-search/search/
  2. chúng ta sẽ thử lấy tất cả các giá trị trong dropdown này

chúng ta bắt đầu thôi. Tại vị trí dropdown đó, chúng ta chuột phải để view code của DOM hoặc dùng tổ hợp phím tắt Ctrl + Shift + C

Chúng ta sẽ xác định được vùng mà chứa nguyên cái khung dropdown như sau


Tiếp theo, chúng ta muốn lấy từng values trong dropdown, thì chúng ta để ý thấy là tất cả đều có chung định dạng <label for="make-xxx">
=> chúng ta sẽ căn cứ vào đây để lấy các element này.
Chúng ta sẽ dùng xpath với cú pháp như sau //XXX[start-with(...)]
trong đó:
  • XXX là tên thẻ, chúng ta có thể dùng div, input... Trong ví dụ này thì XXX là label
  • start-with :là các định dạng chung mà chúng có cùng nhau

=> ta sẽ dùng xpath sau: //label[starts-with(@for,'make-')]//span[@class='label']

ok, vậy cơ bản đã được giải quyết rồi. 
Tư tưởng là ta sẽ dùng 1 list để bắt các WebElement này lại, dùng vòng for để với mỗi 1 element thì sẽ getText() của phần tử đó rồi nhét vào 1 mảng (sau này thao tác với mảng sẽ dễ hơn)
Test scenario như sau:
1. vào trang web
2. click vào dropdown để show lên
3. bắt các element lại và lấy text của chúng

chúng ta viết 1 class Hai1 chứa phương thức lấy giá trị của dropdown

import java.util.ArrayList;


import java.util.List;


import org.openqa.selenium.By;


import org.openqa.selenium.WebDriver;


import org.openqa.selenium.WebElement;



public class Hai1 {


 public List<String> getAllValue(WebDriver driver, String locator) {


// dùng List để chứa các element này lại
  List<WebElement> elements = driver.findElements(By.xpath(locator));


  // Khai báo 1 mảng để chứa các value


  List<String> value = new ArrayList<String>();


  // với mỗi 1 element thì sẽ lấy text của nó


  for (WebElement elm : elements) {


   // sau khi lấy xong thì add luôn vào mảng mới vừa khai báo


   value.add(elm.getText());


   // System.out.println(elm.getText());


  }


  // trả về mảng chứa text 


  return value;


 }


}

Tiếp theo chúng ta viết class Hai2 là class chính

import org.testng.annotations.Test;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;


public class Hai2 {
      // gọi lại class Hai1
 Hai1 hai1 = new Hai1();
        // đặt biến để truyền vào phương thức getAllValue

 private String locator = "//label[starts-with(@for,'make-')]//span[@class=\"label\"]";



 @Test

 public void demo() {

  WebDriver driver = new ChromeDriver();

  driver.get("https://www.sytner.co.uk/car-search/search/");
             // thêm dòng này cho max size của trình duyệt để bắt các element được chính xác nhất

  driver.manage().window().maximize();

  driver.findElement(By.cssSelector(".filter-inset [data-require-container=\"Single\"]:nth-of-type(1)")).click();

  //in ra mảng chứa các giá trị của dropdown
              System.out.println(hai1.getAllValue(driver, locator));

  driver.close();

 }
Chúng ta có kết quả như sau (nhìn hơi ghê tý) :D


Vậy là kết thúc tips get all values dropdown selenium thì chúng ta học được cách lấy xpath động của 1 element.
Cảm ơn các bạn, hẹn gặp lại trong bài viết sắp tới.
Note: vui lòng ghi rõ nguồn khi coppy 😃

0 comments:

Post a Comment