Cùng với interface WebDriver, WebElement được sử dụng trong tất cả các script, đơn giản vì lúc test web, chúng ta tương tác với các element trên trang web. Do đó, chúng ta phải nắm chắc những method của WebElement. Trong Selenium, những hành động đó không nhiều và sử dụng rất dễ.
Lưu ý: Tất cả các method này chỉ hoạt động khi chủ thể của hành động là 1 đối tượng (object) có type là WebElement. Ví dụ cho dễ hiểu:
driver.findElement(By.name("fname")).click();
Như bài trước đã có nói: Method findElement trả lại 1 giá trị type WebElement, do đó: [ driver.findElement(By.name(“fname”)) ] —-> có type là WebElement.
- Dùng để xóa hết các ký tự có trong 1 text field.
- Ví dụ:
driver.findElement(By.name("fname")).clear();
- Dùng để click vào 1 element, như button hoặc link
- Ví dụ:
driver.findElement(By.id("submitButton")).click();
- Dùng để lấy giá trị của attribute của element đó.
- Ví dụ: 1 element như sau:
<img id="mainLogo" src="w3schools.jpg" width="104" height="142">
- Muốn lấy các thông tin src, widtd, height
driver.findElement(By.id("mainLogo")).getAttribute("src") driver.findElement(By.id("mainLogo")).getAttribute("width") driver.findElement(By.id("mainLogo")).getAttribute("height")
- Lưu ý: tất cả những giá trị lấy được sẽ có type String, nếu bạn muốn sử dụng như int, float thì phải convert type trước nhé.
- Lấy các thông số CSS của element đó như là background, font, border…
- Tham số cho method này là propertyName ở type String, property này lấy ở đâu? Bạn có thể lấy ngay ở Developer Tools của trình duyệt, hoặc ở đây.
- Ví dụ:
WebElement searchTextBox= driver.findElement(By.id("lst-ib")); String color= searchTextBox.getCssValue("background-color");
- Dùng để lấy chiều cao, chiều rộng của element.
- Type Dimension: có nghĩa là nó return về object của class Dimension, mà class Dimension lại có 2 method là
getHeight()
vàgetWidth()
- Ví dụ:
Dimension dimesions = driver.findElement(By.id("gbqfsa")).getSize(); System.out.println("Width : " + dimesions.getWidth()); System.out.println("Height : " + dimesions.getHeight());
- Dùng để lấy tag name của element.
- Ví dụ có 1 element: <input name=”foo” /> —> kết quả là “input“
String abc = driver.findElement(By.name("foo")).getTagName();
- Lấy cái Text hiển thị ở trên page.
- Ví dụ có 1 element như sau
<a href="xxx/login" class="button login -clicked">Log in</a>
String abc = driver.findElement(By.xpath("foo")).getText(); System.out.println(abc);
kết quả là "Log in"
- Dùng để xác định xem cái element có đang hiển thị không, phục vụ cho việc debug, hoặc kiểm tra xem Test case pass hay fail.
Ví dụ: Sau khi submit đúng –> sẽ có text “submit successful”. Nếu text này đang display có nghĩa là submit thành công. - Type Boolean: chỉ có 2 giá trị là True và False.
boolean isDisplay = driver.findElement(By.xpath("foo")).isDisplayed(); Assert.assertTrue(isDisplay);
- Dùng để xác định xem cái element có đang được enable không, phục vụ cho việc debug hoặc làm điều kiện để thực hiện action.
- Type Boolean: chỉ có 2 giá trị là True và False. Lưu ý: method này sẽ return True nếu element đó enable, ngoại trừ element Input.
if(driver.findElement(By.xpath("foo")).isEnabled()){ /**Do something*/ } else { /**Do something*/ }
- Dùng để xác định xem cái element có đang được select hay không, phục vụ cho việc debug hoặc làm điều kiện để thực hiện action.
- Ví dụ: bạn có 1 select box “Course” có 5 options và lúc nào cũng được chọn sẵn 1 option, vậy khi bạn muốn chọn 1 option thì bạn phải check xem là cái option của bạn đã được chọn hay chưa, nếu chưa thì bạn select, nếu có rồi thì bạn không cần select nữa.
if(driver.findElement(By.xpath("foo")).isSelected()){ /**Do something*/ } else { /**Do something*/ }
- Dùng để nhập dữ liệu vào text field. Đây là method được dùng rất nhiều vì việc test gắn với việc nhập dữ liệu đầu vào.
driver.findElement(By.name("fname")).sendKeys("My First Name");
- Dùng để submit 1 form, ta chỉ dùng được khi element đó có type=”submit” và nó nằm trong <form> tag.
- Do đó:
Nếu element’s type = “button” thì submit() không chạy được.
Nếu button ở ngoài <form> tag thì submit() không chạy được. - Ví dụ
<form><input id="submitbutton" name="submitbutton" type="submit" value="Next step" class="g-button g-button-submit"></form>
driver.findElement(By.id("submitbutton")).submit();
[…] ← Previous Next → […]
[…] Trong đó, sendKeys() và click() là method của interface WebElement. […]
String abc = driver.findElement(By.xpath(“foo”)).getText();
System.out.println(abc);
Mình không hiểu By.xpath(“foo”) trong đoạn này?
Bạn có thể giải thích giúp rõ hơn không?
WebElement findElement(By by) yêu cầu Tham số truyền vào là 1 Object loại By.
By.xpath(“foo”): Class By gọi 1 static Method của nó có tên là xpath, và kết quả nó return về là 1 Object loại By.
xpath(java.lang.String xpathExpression) là 1 Method của Class By: dùng để xác định vị trí của 1 element thông qua xpath.
Tổng kết lại
driver.findElement(By.xpath(“foo”)) có trình tự chạy code như sau:
By.xpath(“foo”) sẽ xác định vị trí element nào có xpath là “foo”
findElement() sẽ tìm kiếm và lấy cái element đầu tiên trong list các element có xpath “foo”
Thank you o.o
Log in
Nhưng trong đoạn ví dụ element trên không có “foo” mà nhỉ?
Ps: Giờ đọc lại lần nữa mới hiểu câu hỏi trước đó mình hỏi :v
Ví dụ có 1 element: input name=”foo” —> kết quả là “input“
Mình có nhắc ở trên rồi mà
Ví dụ cho getText() ý, hình như đang sai. Phần ví dụ của getTagName thì mình hiểu.
Bạn chỉ rõ đang sai là sai như thế nào? getText là get visible text hiển thị trên UI, nó là cái giá trị nằm ngoài tag. Ví dụ ghi rất rõ:
a href=”xxx/login” class=”button login -clicked” rel=”nofollow”>Log in
[…] là Actions. Class này cũng cấp những API để làm những tương tác phức tạp mà interface WebElement cung cấp. Ta có thể implement nó như […]
Anh ơi cho em hỏi, đoạn check error message hiển thị này, chỉ check nếu message có hiển thị là True, không hiển thị là False. Còn mình không check được text hiển thị có đúng hay không, nội dung nó match với expect results không à anh?
boolean isDisplay = driver.findElement(By.xpath(“foo”)).isDisplayed();
Assert.assertTrue(isDisplay);
Đoạn đó anh đang giới thiệu function isDisplayed() mà. Nếu em muốn dùng assert text thì em dùng function khác chứ.
Ví dụ:
String text = driver.findElement(By.xpath(“foo”)).getText();
Assert.assertEquals(text, expectedText);
Dạ, em chạy được rồi ạ.
Em cảm ơn anh nhiều ạ, nhờ seri của a mà e đã học được rất nhiều thứ :))