Bài 5 - Selenium WebDriver Wait Commands, Checkbox and Dropdown box
Topic Học Kiểm thử phần mềm tự động sẽ tiếp tục giới thiệu về các lệnh trong Selenium Webdriver.
1) ImplicitlyWait Command
Việc tìm kiếm các yêu tố bất kỳ luôn mất 1 khoảng thời gian chờ đợi ngầm đã được thiết lập. Dùng lệnh này để báo với Selenium rằng - Phải chờ trong khoảng thời gian đó trước khi ném 1 ngoại lệ rằng không tìm thấy các yếu tố trên trang.
WebDriver driver => new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10,
TimeUnit.SECONDS);
driver.get("http://url_that_delays_loading");
WebElement myDynamicElement = driver.findElement(By.id("myDynamicElement"));
|
2) FluentWait Command
Xác định thời gian chờ tối đa cho 1 điều kiện cũng như tần suất để kiểm tra điều kiện . Giup cấu hình khoảng thời gian chò đợi, bỏ qua các trường hợp ngoại lệ trong quá trình chờ khi tìm kiếm 1 phần tử trên trang
// Waiting
30 seconds for an element to be present on the page, checking
// for its
presence once every 5 seconds.
Wait wait = new
FluentWait(driver)
.withTimeout(30,
SECONDS)
.pollingEvery(5,
SECONDS)
.ignoring(NoSuchElementException.class);
WebElement foo =
wait.until(new Function() {
public
WebElement apply(WebDriver driver) {
return
driver.findElement(By.id("foo"));
}
});
|
3) ExpectedConditions
Command
Một điều kiện hợp lý được mong đợi để giá trị cuối cùng không phải là null hoặc sai(false).
WebDriverWait wait = new
WebDriverWait(driver, 10);
WebElement element =
wait.until(ExpectedConditions.elementToBeClickable(By.id(>someid>)));
|
4)
PageLoadTimeout Command
Thiết lập giá trị thời gian để chờ đợi cho trang web hoàn thành tải(loadding) trước khi ném một lỗi ngoại lệ
driver.manage().timeouts().pageLoadTimeout(100, SECONDS);
|
5) SetScriptTimeout
Command
Thiết lập thời gian chờ đợi cho một kịch bản không đồng bộ để thực hiện hoàn thành trước khi ném một lỗi. Nếu thời gian chờ là tiêu cực, sau đó kịch bản sẽ được phép chạy vô thời hạn.
driver.manage().timeouts().setScriptTimeout(100,SECONDS);
|
6)Sleep Command
thread.sleep(1000);
|
Câu
lệnh này hiếm khi được sử dụng vì nó luôn luôn buộc các trình duyệt chờ đợi một
thời gian cụ thể. Nếu bạn sử dụng câu lệnh này bạn có thể xác định giá trị thời
gian chờ đợi cao hơn nhiều khi bạn làm các trường hợp kiểm thử.
CheckBox
& Radio Button Operations
Check box và Radio button cho phép người dung lựa chọn “
Check” hoặc “ Uncheck” .
6)By.ID method
6)By.ID method
Radio Button và Checkbok – đều có ID và Name riêng. Selenium webdriver sẽ tìm và nhận diện mỗi checkbox thông qua phương thức By.id
|
7) With ‘IsSelected’
Các checkbox hoặc radio button có thể được lựa chọn hoặc chưa được lựa chọn.
Làm sao để Selenium Webdriver biết rằng nó đã được lựa chọn hay chưa ?
Dùng “IsSelected” kiểm tra checkbox /
Radion button box đã được chọn chưa .
// Khai báo
List oRadioButton =
driver.findElements(By.name("toolsqa"));
// tạo biến với mặt định ban đầu là ko check
( false)
boolean bValue = false;
// Kiểm tra
radion button đo đã được check hay chưa
bValue = oRadioButton.get(0).isSelected();
// Kiểm tra nếu đã được chọn ( bvalue=true
if(bValue = true){
// nếu radio button đầu
tiên đã được chọn mặc định thì sẽ
chọn nút radio thứ 2
oRadioButton.get(1).click();
}else{
// nút radio đầu tiên sẽ được
chọn Nếu nó không được chọn mặc định
thì
oRadioButton.get(0).click();
}
|
Ở
ví dụ trên , Tên của các radio button/ checkboxes trong cùng group là
giống nhau nhưng giá trị khác nhau. Vì vậy nếu tìm checkbox/ radiobuton với thuộc tính
name thi sẽ nhận được nhiều giá trị . Do đó ta sử dụng phương thức findElements
và lưu trữ trong list của WebElements
8. With ‘Value’
Bạn có thể chọn nút radio button / Checkbox với các giá trị của nó
//Tìm checkbox hoặc nút
radio bằng tên(Name)
List oCheckBox =
driver.findElements(By.name(“eRadio”));
//Câu lệnh lấy số
checkboxes hiện tại
int iSize =
oCheckBox.size();
//Bắt đầu vòng lặp từ
checkbox đầu tiên đến checkbox cuối cùng
for(int i=0; i <
iSize ; i++ ){
//Lưu tên checkbox là
một chuỗi , sử dụng thuộc tính Value
String sValue =
oCheckBox.get(i).getAttribute(“value”);
//Chọn checkbox nếu giá
trị của các checkbox giống nhau
if
(sValue.equalsIgnoreCase(“toolsqa”)){
oCheckBox.get(i).click();
// Thoát khỏi vòng lặp
break;
}
}
|
8) By ‘CssSelector’
: Lựa chọn một radido hoặc
checkbox bằng cách sử dụng giá trị của nó
1
2
3
|
WebElement oCheckBox = driver.findElement(By.cssSelector("input[value='Tools QA']"));
oCheckBox.click()
|
9) Selecting Dropdown/Multiple Select Box
Trước khi sử dụng Dropdown box control, ta cần phải làm 2 việc sau:
- Import gói org.openqa.selenium.support.ui.Select
- Khai báo "Select"
object trong WebDriver
Cú pháp Lệnh
Select
oSelection = new Select(driver.findElement(By.id(id)));
|
10) Chọn 1 giá trị sử dụng ‘selectByVisibleText’
Dùng để chọn 1 giá trị bất kỳ trong danh sách lựa chọn của Dropdowbox hoặc multiple
selection boxes
Select oSelection = new
Select(driver.findElement(By.id(id)));
oSelection.selectByVisibleText(text);
|
11) Chọn giá trị sử dụng ‘selectByIndex’
Gần giống selectByVisibleText nhưng sự khác biệt là cung
cấp các chỉ số của giá trị tùy chọn ứng
|
12) Chọn giá trị sử dụng ‘selectByValue’
Mỗi option trong hợp thoại lựa chọn của Drop down box / Multiple
Select Box đều có một values riêng, vì vậy ta có thể chọn values ứng với giá
trị của từng lựa chọn
Select oSelection = new
Select(driver.findElement(By.id(id)));
oSelection.selectByValue(value)
|
Note: Mỗi values ứng với từng giá trị lựa chọn trong option của của
Drop down box / Multiple Select Box là duy nhất
12) Getting the Size of Select item
Đôi khi bạn có thể muốn đếm các phần tử trong Dropdowbox và
Multiple Select Box, ta có thể sử dụng
vòng lặp trên Select element để đếm có bao nhiu option
|
13)In danh sách các Options
Một khi bạn có được kích thước của các yếu tố Select sau đó nó
rất dễ dàng để in các văn bản của các tùy chọn.
Select oSelection = new
Select(driver.findElement(By.id(id)));
List oSize = oSelection.getOptions();
int iListSize = oSize.size();
for(int i =0; i>iListSize ; i++){
String sValue =
oSelection.getOptions().get(i).getText();
System.out.println(sValue);
}
|
14. Deselect methods
Chỉ áp dụng cho Multiple Select Box . Nếu trong trường hợp bạn
muốn bỏ chọn bất kỳ tùy chọn lựa chọn và có thể được thực hiện với deselectAll (), deselectByIndex,
deselectByValue và deselectByVisibletext.
Select oSelection = new
Select(driver.findElement(By.id(id)));
oSelection.deselectAll();
oSelection.deselectByIndex(index);
oSelection.deselectByValue(value);
oSelection.deselectByVisibleText(text);
|
15. Multiple selection method
Chỉ áp dụng cho Multiple Select Box và không phải trên List
boxes or dropdowns. .
Select oSelection = new
Select(driver.findElement(By.id(id)));
oSelection.selectByIndex(index)
oSelection.selectByIndex(index)
// Or
oSelection.selectByVisibleText(text)
oSelection.selectByVisibleText(text)
// Or
oSelection.selectByValue(value)
oSelection.selectByValue(value)
|
16)Entering Values in Input Boxes
Dùng phương thức Sendkeys để nhập
giá trị cho input field
driver.FindElement (By.name(“UserName”)).sendKeys(“Hockiemthuphanmem”);
|
17)Deleting Values in Input Boxes
Phương thức clear()
dung để xóa các text defaut trong Textbox.
Driver.findElement(By.name(“Username”)).Clear ();
|
Bài tập áp dụng cho topic " Học kiểm thử phần mềm tự động"
1)
Đăng nhập Mantis
( Check “Remember my login in this browser” checkbox)
2)
Chọn Project “User guide” trong
Dropdownbox “ Project ”
3)
Chọn Report
Issues
4)
Lần lượt Chọn / Nhập giá trị vào các field ( attach image)
package HocKiemThuPhanMem;
import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.Select; public class PracticeWebdriver { public static WebDriver driver; public static void main(String[] args) { driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.findElement(By.name("username")).sendKeys("Học kiểm thử phần mềm tự đông"); driver.findElement(By.name("password")).sendKeys("Học Kiểm thử"); WebElement checkRemember = driver.findElement(By.name("perm_login")); WebElement checkSession = driver.findElement(By.name("secure_session")); // Kiểm tra remember checkbox đã check chưa, nếu chưa check //thì thực hiện click để check if (checkRemember.isSelected() == false) { checkRemember.click(); } // Kiểm tra Session đã check chưa, nếu chưa thì thực hiện click để check if (checkSession.isSelected() == false) { checkSession.click(); } driver.findElement( By.xpath("/html/body/div[3]/form/table/tbody/tr[6]/td/input")) .click(); // phan nay se hoc sau // Chọn Project WebElement GetProject = driver.findElement(By.name("project_id")); String GetProjectCurrent = GetProject.getText(); // Nếu text hiện tại khác Project name sẽ chọn thì mới thực hiện chọn if (GetProjectCurrent != "User guide") { Select dropProject = new Select(driver.findElement(By .name("project_id"))); dropProject.selectByVisibleText("User guide"); } // Click Report issue driver.findElement(By.linkText("Report Issue")).click(); // Khai báo biến String category = "category_id"; String reproducibility = "reproducibility"; String Severity = "severity"; String Priority = "priority"; // Chọn Category Select drpCategory = new Select(driver.findElement(By.name(category))); drpCategory.selectByVisibleText("All"); // Chọn reproducibility Select drpreproducibility = new Select(driver.findElement(By .name(reproducibility))); drpreproducibility.selectByVisibleText("always"); // CHọn Severity Select drpSeverity = new Select(driver.findElement(By.name(Severity))); drpSeverity.selectByVisibleText("major"); //Chọn Priority Select drpPriority = new Select(driver.findElement(By.name(Priority))); drpPriority.selectByVisibleText("high"); // Input Steps String Steps = " This is demo" ; String additional_info = " This is demo for Học kiểm thử phần mềm"; String Platform = "IOS"; driver.findElement(By.name("summary")) .sendKeys( "[Firefox][Run-Selenium Driver]The issue is posted by WebDriver for Học kiểm thử phần mềm tự động topic"); driver.findElement(By.name("description")).clear(); driver.findElement(By.name("description")).sendKeys(Steps); driver.findElement(By.name("additional_info")) .sendKeys(additional_info); Select PlatformSelect = new Select(driver.findElement(By .name("custom_field_1"))); PlatformSelect.selectByVisibleText(Platform); //Upload image - CHọn image trong ổ đĩa lưu trữ WebElement uploadElement = driver.findElement(By.id("ufile[]")); uploadElement.sendKeys("D:\\SOFT\\Demo-Image\\Hoc-kiem-thu-phan-mem-2.jpg"); driver.findElement(By.cssSelector("input[value='50']")).click(); // Click Submit driver.findElement(By.cssSelector("input[value='Submit Report']")) .click(); // Logout driver.findElement(By.linkText("View Issues")).click(); driver.findElement(By.linkText("Logout")).click(); } } |
Video thực hành học kiểm thử phần mềm tự động
-----------------------