Yêu cầu:
- Làm sao để chọn các giá trị: Automation Tester/ Manual Tester trong dropdown ở hình trên?
- Làm sao để kiểm tra trong dropdown có bao nhiêu giá trị => như hình trên có 5 giá trị?
- Làm sao để kiểm tra 1 giá trị trong dropdown hiển thị đúng hay chưa sau khi đã chọn thành công?
- Làm sao để kiểm tra dropdown có phải là multi-select hay single select => multi-select: cho phép chọn nhiều giá trị trong dropdown/ list?
Giải pháp:
- Selenim WebDriver hỗ trợ kiểm tra các phần tử Dropdown/ List bằng cách sử dụng lớp Select thay vì sử dụng lớp WebElement
=> import org.openqa.selenium.support.ui.Select; - Lớp Select cung cấp các phương pháp và thuộc tính khác nhau để tương tác với dropdown/ list qua phần tử HTML là thẻ <select>
Các phương thức sử dụng trong bài viết:
- Select dropdown sử dụng thuộc tính ID:
Select select = new Select(driver.findElement(By.id(“job1”)));
=> <select id=”job1“ name=”user_job1“> - Select một giá trị trong dropdown sử dụng visible text (thường sử dụng)
select.selectByVisibleText(“Automation Tester”);
=> <option value=”automation“>Automation Tester</option> - Hoặc: Select một giá trị trong dropdown sử dụng value
select.selectByValue(“manual”);
=> <option value=”manual“>Manual Tester</option> - Hoặc: Select một giá trị trong dropdown sử dụng index (bắt đầu từ vị trí số 0)
select.selectByIndex(3);
=> <option value=”website“>Website Tester</option> - Kiểm tra dropdown không hỗ trợ multi-select:
Assert.assertFalse(select.isMultiple()); - Kiểm tra dropdown có 5 giá trị:
Assert.assertEquals(5, select.getOptions().size());
=> Mỗi 1 giá trị tương ứng với 1 thẻ <option> - Kiểm tra giá trị trong dropdown hiển thị đúng sau khi đã chọn thành công (giá trị đã chọn sẽ luôn hiển thị ở vị trí đầu tiên):
Assert.assertEquals(“Manual Tester”, select.getFirstSelectedOption().getText());
Site demo: Link
Source demo:
[code language=”java” autolinks=”true”]
package seleniumWebDriver;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class WebDriver11_HandleDropdownAndList {
WebDriver driver;
@BeforeClass
public void setUp() {
driver = new FirefoxDriver();
driver.get(“http://daominhdam.890m.com/”);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
}
@Test
public void Test01_HandleDropdownList() throws Exception {
// Select using ID attribute
Select select = new Select(driver.findElement(By.id(“job1”)));
// Verify Dropdown doesn’t support multi-select
Assert.assertFalse(select.isMultiple());
// Verify Dropdown has five options
Assert.assertEquals(5, select.getOptions().size());
// Select an option in Dropdown using visible text
select.selectByVisibleText(“Automation Tester”);
Assert.assertEquals(“Automation Tester”, select.getFirstSelectedOption().getText());
Thread.sleep(4000);
// Select an option in Dropdown using value attribute
select.selectByValue(“manual”);
Assert.assertEquals(“Manual Tester”, select.getFirstSelectedOption().getText());
Thread.sleep(4000);
// Select an option in Dropdown using index
select.selectByIndex(3);
Assert.assertEquals(“Mobile Tester”, select.getFirstSelectedOption().getText());
Thread.sleep(4000);
}
@AfterClass
public void tearDown() {
driver.quit();
}
}
[/code]
Video demo:
Cảm ơn a vì bài viết . Tuy nhiên nếu như em muốn xử lý chức năng chọn dropdown list hoặc là checkbox hoặc radio button theo hướng mà ở dòng code, k cần viết rõ value ra, cái đó sẽ được nhập trong file testcase . Tức là em muốn chỉ cần code 1 lần mà áp dụng được với các project khác nhau ấy ạ . Anh giúp em code cái vấn đề này được không ạ ?
Chào em, nếu viết theo dạng common function thì em sử dụng như sau nhé:
[code language=”java”]
public void selectDropdown(WebDriver driver, String locator, String value) {
Select select = new Select(driver.findElement(By.xpath(locator)));
select.selectByVisibleText(value);
}
[/code]
Testcase:
String abcdDropdown = “//*[@id=’job’]”;
selectDropdown(driver, abcdDropdown, “Manual Tester”);