Automation Test UI with Selenium WebDriver
I. Đối tượng
- Bất cứ ai có định hướng về Automation QA.
II. Mục tiêu khóa học
+...
+ XPath Axes
Automation Test UI with Selenium WebDriver
- Bất cứ ai có định hướng về Automation QA.
Để kiểm tra xe một checkbox đã được checked hay chưa, chúng ta sẽ dùng hàm isSelected(). Hàm isSelected() trả về một giá trị thuộc kiểu boolean, true nếu checkbox đã được checked, ngược lại sẽ trả về giá trị false
WebElement checkbox = driver.findElement(By.id("checkboxId"));
System.out.println("The checkbox is selection state is - " + checkbox.isSelected());
During automation, if we want to check a checkbox with click() method then the checkbox gets unchecked if its already checked. So, if you want to make sure that you are only checking the checkbox then we should first get the checkbox state using isSelected() method and then click on it only if it is in unchecked state.
Trong khi làm automation, có rất nhiều trường hợp chúng ta muốn check vào một checkbox. Do đó, nếu bạn muốn đảm bảo rằng bạn chỉ muốn check cho checkbox đó thì trước hết bạn phải biết được trạng thái hiện tại của nó là gì; bằng cách sử dụng hàm isSelected(). Nếu trạng thái hiện tại là unchecked thì lúc đó chúng ta mới check vào checkbox
WebElement checkbox = driver.findElement(By.id("checkboxId"));
//If the checkbox is unchecked then isSelected() will return false
//and NOT of false is true, hence we can click on checkbox
if(!checkbox.isSelected())
checkbox.click();
Việc xử lý drop down list , sẽ dựa vào các thuộc tính value, visible text và index.
Đi vào vấn đề chính là việc xử lý drop down list trong selenium. Như đoạn HTLM ở trên, thì ta có value là một thuộc tính trong thẻ option đó là:
value="" selected="" disabled="">Please select
value="Sunday">Sunday
value="Monday">Monday
value="Tuesday">Tuesday
value="Wednesday">Wednesday
value="Thursday">Thursday
value="Friday">Friday
value="Saturday">Saturday
Command:
Select days = new Select(driver.findElement(By.id("select-demo")));
days.selectByValue("Tuesday")
Với Visible text – thì đây chính là text hiển thị trên trang web mà ta chọn từ drop down:
Please select
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Command:
Select days = new Select(driver.findElement(By.id("select-demo")));
days.selectByVisibletext("Friday")
Còn với index thì có thể hiểu đơn giản như là ta có một mảng các option, được đánh số từ 0 cho đến hết, như ví dụ trên thì từ 0 đến 7. Index 1 tương ứng với Sunday, lần lượt index 2 tương ứng với Monday, và index 7 tương ứng với Saturday.
Command:
Select days = new Select(driver.findElement(By.id("select-demo")));
days.selectByIndex(3)
** selectByValue(String arg0) || Chọn option có thuộc tính value tương ứng với tham số truyền vào. Tham số truyền vào phải có giá trị tương ứng với giá trị của thuộc tính trong option được chọn/bỏ chọn. Và không phải lúc nào value của option cũng giống với visible text, nên là phải lưu ý tránh nhầm lẫn nha.
** selectByVisibleText(String arg0) || Chọn option có text hiển thị tương ứng với tham số truyền vào. Tham số truyền vào này phải giống 100% với text hiển thị trên drop down.
** selectByIndex(int arg0) || Chọn option theo index của option trong drop down list. Tham số truyền vào là index của option muốn select.
Bonus thêm một số hàm có thể gặp khi làm việc với drop down list:
** isMultiple() || Hàm này để kiểm tra xem drop down list đó có thể chọn được nhiều giá trị hay không, nếu có hàm sẽ trả về giá trị TRUE, ngược lại sẽ trả về FALSE, và nó không yêu cầu truyền tham số đầu vào.
** deselectAll() || Hàm này được sử dụng để hủy tất cả các option đã được select, và chỉ sử dụng đối với những drop down list cho phép chọn nhiều option.
Full code
package basic;
import org.openqa.selenium.By;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.support.ui.Select;
public class Dropdown {
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver", "E:\\Program\\Firefox\\geckodriver.exe");
FirefoxOptions options = new FirefoxOptions();
options.setBinary("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
FirefoxDriver driver = new FirefoxDriver(options);
driver.get("http://www.seleniumeasy.com/test/basic-select-dropdown-demo.html");
Select s = new Select(driver.findElement(By.id("select-demo")));
s.selectByValue("Tuesday");
s.selectByIndex(6);
s.selectByVisibleText("Wednesday");
}
}
DragDrop là một trong scenario phổ biến trong automationt test. Trong bài này, chúng ta sẽ tìm hiểu cách xử lý event dragdrop trong Selenium Webdriver bằng việc thông qua Action class
Để thực hiện các hành động của người dùng như kéo và thả, chúng ta có một lớp Action trong Selenium WebDriver. Sử dụng lớp ACtion, trước tiên chúng ta xây dựng một chuỗi các sự kiện tổng hợp và sau đó thực hiện nó thông qua Action class . Các phương thức khác nhau của lớp Action mà chúng ta sẽ sử dụng ở đây là-
Ví dụ:
//WebElement on which drag and drop operation needs to be performed
WebElement fromWebElement = driver.findElement(By Locator of fromWebElement);
//WebElement to which the above object is dropped
WebElement toWebElement = driver.findElement(By Locator of toWebElement);
//Creating an object of Actions class to build composite actions
Actions builder = new Actions(driver);
//Building drag and drop action
Action dragAndDrop = builder.clickAndHold(fromWebElement)
.moveToElement(toWebElement)
.release(toWebElement)
.build();
//Performing the drag and drop action
dragAndDrop.perform();
Frame có nghĩa là khung - một định dạng trong HTML dùng để sắp xếp bố cục - tạo layout và thiết kế một trang web. Frame hỗ trợ hiển thị tài liệu trên website dưới nhiều dạng khác nhau trong cùng một cửa sổ trình duyệt.
Thẻ iFrame HTML là những inline frames được sử dụng để chèn một HTML Document bên trong một HTML Document khác.
<frameset rows = "10%,80%,10%">
<frame id= "first" name = "top" src = "/html/top_frame.htm" />
<frame name = "main" src = "/html/main_frame.htm" />
<frame name = "side" src = "/html/side_frame.htm" />
</frameset>
<iframe id="ifr" name="demo" src="demo.html" height="200" width="300"></iframe>
<iframe id="ifr" name="demo" src="demo.html" height="200" width="300"></iframe>
// switchong to a rame which has id as 'ifr'
driver.switchTo().frame("ifr")
<iframe id="ifr" name="demo" src="demo.html" height="200" width="300"></iframe>
// switching to a frame which has name='demo'
driver.switchTo().frame(arg0)
<iframe id="ifr" name="demo" src="demo.html" height="200" width="300"></iframe>
<iframe id="ifr" name="demo" class='second' src="width.html" height="200" width="300"></iframe>
<iframe id="ifr" name="demo" src="width.html" height="200" width="300"></iframe>
// switch to 1st frame
driver.switchTo().frame("//iframe[@src='demo.html']")
<iframe id="ifr" name="demo" src="demo.html" height="200" width="300"></iframe>
<iframe id="ifr" name="demo" class='second' src="width.html" height="200" width="300"></iframe>
<iframe id="ifr" name="demo" src="width.html" height="200" width="300"></iframe>
// switch to 1st frame
driver.switchTo().frame(1)
Một biến mà nó đang có giá trị là null
(không trỏ đến bất kỳ object nào cả)
NullPointerException
là Unchecked Exception
nên compiler sẽ không giúp bạn phát hiện và báo cho bạn được, bạn phải tự xử lý.
package features;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
public class Demo4Test {
WebDriver driver;
@Test
void name() {
driver.get("https://google.com");
}
}
driver
đang là giá trị null
, nên khi sử dụng nó sẽ bị lỗi NullPointerException
.null
là giá trị mặc định của 1 biến có kiểu dữ liệu object@Test
void name() {
driver = new ChromeDriver();
driver.get("https://google.com");
}
Bất cứ lúc nào bạn gặp lỗi NullPointerException
thì hãy xem dòng lỗi đó là dòng nào, biến để gọi method đã được assign object nào chưa, nếu chưa thì hãy assign
Trong một nhóm các radio button, tại một thời điểm thì ta chỉ có thể chọn một radio button cho các option đó. Trong HTML, các radio button nằm tr
ong thẻ input và có attribute là Type = radio.
Các bạn có thể tham khảo ví dụ dưới đây về radio button:
HTML:
Và ta có một vài vấn đề có thể làm với radio button như sau:
Đầu tiên, xác định locator của radio button
driver.findElement(By.xpath("//input[@value = 'Female']")
Tiếp theo, kiểm tra giá trị mặc định của radio button là đã được check hay chưa bằng cách sử dụng hàm isSelected()
driver.findElement(By.xpath("//input[@value = 'Female']")).isSelected();
Kế tiếp nữa, là thực hiện click chọn radio button đó bằng cách sử dụng hàm click(), với locator đã tìm được ở bước đầu tiên:
driver.findElement(By.xpath("//input[@value = 'Female']")).click();
Với trường hợp kiểm tra xem radio button có thể select được (enable and clickable) trên ứng dụng hay không ta có thể sử dụng hàm .isEnabled() để kiểm tra.
driver.findElement(By.xpath("//input[@value = 'Female']")).isEnabled()
Ngoài ra còn có thể sử dụng hàm isDisplayed() để kiểm tra phần tử ấy có đang hiển thị hay không:
driver.findElement(By.xpath("//input[@value = 'Female']")).isDisplayed()
Run code:
package basic;package basic;
import org.openqa.selenium.By;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
public class RadioButton { public static void main(String[] args)
{
System.setProperty("webdriver.gecko.driver", "E:\\Program\\Firefox\\geckodriver.exe");
FirefoxOptions options = new FirefoxOptions(); options.setBinary("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
FirefoxDriver driver = new FirefoxDriver(options);
driver.get("http://www.seleniumeasy.com/test/basic-radiobutton-demo.html"); System.out.println(driver.findElement(By.xpath("//input[@value = 'Female']")).isEnabled());
driver.findElement(By.xpath("//input[@value = 'Female']")).click();
System.out.println(driver.findElement(By.xpath("//input[@value = 'Female']")).isSelected());
}
}