Chào các bạn đã đến với chủ đề tiếp theo của mình. Hôm nay, mình sẽ tiếp tục giới thiệu về cách xử lý Alert với Selenium. Thông thường sẽ có 4 loại Alert như sau:
- Basic Alert
- Confirm Alert
- Prompt Alert
- Basic Authen
Bây giờ, mình sẽ hướng dẫn các bạn xử lý cho từng loại Alert cũng như đi qua các ví dụ cụ thể nhé.
Nội dung
1. Các hàm thường sử dụng cho Alert
Để làm việc với Alert, chúng ta cần phải import thư viện sau:
import org.openqa.selenium.Alert;
1.1. Hàm wait alertIsPresent()
- Hàm này dùng để chờ Alert hiển thị trên màn hình
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
1.2. Hàm switchTo().alert()
- Hàm này được dùng để switch vào bên trong Alert
- Lưu ý: để thao tác trên Alert, chúng ta cần phải switch vào nó trước.
Alert alert = driver.switchTo().alert();
1.3. Hàm alert.getText()
- Hàm này được dùng để get text đang hiển thị trên alert
- Được sử dụng cho basic alert, confirmation alert, prompt alert
String text = alert.getText();
1.4. Hàm alert.sendKeys()
- Hàm này được dùng để nhập dữ liệu vào textbox trên Alert
- Được sử dụng cho Prompt Alert
alert.sendKeys("Selenium")
1.5. Hàm alert.dismiss()
- Hàm này được dùng để click vào button “Cancel” trên Alert
- Được sử dụng cho confirmation alert, prompt alert
alert.dismiss();
1.6. Hàm alert.accept
- Hàm này được dùng để click vào button “OK” trên Alert
- Được sử dụng cho confirmation alert, prompt alert
alert.accept();
Chúng ta hãy đi vào ví dụ cụ thể nhé.
2. Ví dụ
2.1. Ví dụ 1
- Open url: http://the-internet.herokuapp.com/javascript_alerts
- Click to button ‘Click for JS Alert‘
- Wait for alert display
- Get alert text
- Verify alert text displayed: “I am a JS Alert“
- Click Ok button
- Verify message displayed: ‘You successfully clicked an alert‘
@Test
public void TC_01_Basic_Alert() throws InterruptedException {
driver.get("http://the-internet.herokuapp.com/javascript_alerts");
driver.findElement(By.xpath("//button[text()='Click for JS Alert']")).click();
// Wait for Alert displayed
explicitWait.until(ExpectedConditions.alertIsPresent());
// Switch to alert
alert = driver.switchTo().alert();
// Get alert text
String alertText = alert.getText();
// Verify alert text displayed: "I am a JS Alert"
Assert.assertEquals(alertText, "I am a JS Alert");
Thread.sleep(3000);
// Click Ok button
alert.accept();
// Verify message displayed: 'You successfully clicked an alert'
Assert.assertEquals(driver.findElement(By.id("result")).getText(), "You successfully clicked an alert");
}
2.2. Ví dụ 2
- Open url: http://the-internet.herokuapp.com/javascript_alerts
- Click on button ‘Click for JS Confirm’
- Wait for alert display
- Get alert text
- Verify Alert text displayed: “I am a JS Confirm”
- Click OK button
- Verify message displayed: “You clicked: Ok”
- Click on button ‘Click for JS Confirm’ again
- Click Cancel button
- Verify message displayed: “You clicked: Cancel”
@Test
public void TC_02_Confirm_Alert() throws InterruptedException {
driver.get("http://the-internet.herokuapp.com/javascript_alerts");
driver.findElement(By.xpath("//button[text()='Click for JS Confirm']")).click();
// Wait for Alert displayed
explicitWait.until(ExpectedConditions.alertIsPresent());
// Switch to alert
alert = driver.switchTo().alert();
// Get alert text
String alertText = alert.getText();
// Verify alert text displayed: "I am a JS Confirm"
Assert.assertEquals(alertText, "I am a JS Confirm");
Thread.sleep(3000);
// Click Ok button
alert.accept();
// Verify message displayed: 'You clicked: Ok'
Assert.assertEquals(driver.findElement(By.id("result")).getText(), "You clicked: Ok");
// Click on button 'Click for JS Confirm' again
driver.findElement(By.xpath("//button[text()='Click for JS Confirm']")).click();
// Wait for Alert displayed
explicitWait.until(ExpectedConditions.alertIsPresent());
// Switch to alert
alert = driver.switchTo().alert();
Thread.sleep(3000);
// Click Cancel button
alert.dismiss();
// Verify message displayed: 'You clicked: Cancel'
Assert.assertEquals(driver.findElement(By.id("result")).getText(), "You clicked: Cancel");
}
2.3. Ví dụ 3
- Open url: http://the-internet.herokuapp.com/javascript_alerts
- Click on button ‘Click for JS Prompt’
- Wait for alert display
- Get alert text
- Verify Alert text displayed: “I am a JS prompt”
- Input text to Alert. Ví dụ: “abc”
- Click OK button
- Verify Alert text displayed: “You entered: abc”
@Test
public void TC_03_Prompt_Alert() throws InterruptedException {
driver.get("http://the-internet.herokuapp.com/javascript_alerts");
driver.findElement(By.xpath("//button[text()='Click for JS Prompt']")).click();
// Wait for Alert displayed
explicitWait.until(ExpectedConditions.alertIsPresent());
// Switch to alert
alert = driver.switchTo().alert();
// Get alert text
String alertText = alert.getText();
// Verify alert text displayed: "I am a JS prompt"
Assert.assertEquals(alertText, "I am a JS prompt");
// Input text to Alert. Ví dụ: “abc”
alert.sendKeys("abc");
Thread.sleep(3000);
// Click Ok button
alert.accept();
Thread.sleep(3000);
// Verify message displayed: 'You entered: abc'
Assert.assertEquals(driver.findElement(By.id("result")).getText(), "You entered: abc");
}
2.4. Ví dụ 4
- Open url: http://the-internet.herokuapp.com/basic_auth
- Input Username & password and click Sign In button
- Verify Alert text displayed: “‘Congratulations! You must have the proper credentials.’”
@Test
public void TC_04_Authen_Alert() throws InterruptedException {
String username = "admin";
String password = "admin";
driver.get("http://" + username + ":" + password + "@" + "the-internet.herokuapp.com/basic_auth");
Thread.sleep(3000);
// Get text
String text = driver.findElement(By.tagName("p")).getText();
Assert.assertEquals(text, "Congratulations! You must have the proper credentials.");
}
Here is full code:
package org.example.Topic26;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.time.Duration;
public class Alert_Authen {
WebDriver driver;
WebDriverWait explicitWait;
Alert alert;
@BeforeClass
public void beforeClass() {
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
explicitWait = new WebDriverWait(driver, Duration.ofSeconds(10));
driver.manage().window().maximize();
}
@Test
public void TC_01_Basic_Alert() throws InterruptedException {
driver.get("http://the-internet.herokuapp.com/javascript_alerts");
driver.findElement(By.xpath("//button[text()='Click for JS Alert']")).click();
// Wait for Alert displayed
explicitWait.until(ExpectedConditions.alertIsPresent());
// Switch to alert
alert = driver.switchTo().alert();
// Get alert text
String alertText = alert.getText();
// Verify alert text displayed: "I am a JS Alert"
Assert.assertEquals(alertText, "I am a JS Alert");
Thread.sleep(3000);
// Click Ok button
alert.accept();
// Verify message displayed: 'You successfully clicked an alert'
Assert.assertEquals(driver.findElement(By.id("result")).getText(), "You successfully clicked an alert");
}
@Test
public void TC_02_Confirm_Alert() throws InterruptedException {
driver.get("http://the-internet.herokuapp.com/javascript_alerts");
driver.findElement(By.xpath("//button[text()='Click for JS Confirm']")).click();
// Wait for Alert displayed
explicitWait.until(ExpectedConditions.alertIsPresent());
// Switch to alert
alert = driver.switchTo().alert();
// Get alert text
String alertText = alert.getText();
// Verify alert text displayed: "I am a JS Confirm"
Assert.assertEquals(alertText, "I am a JS Confirm");
Thread.sleep(3000);
// Click Ok button
alert.accept();
// Verify message displayed: 'You clicked: Ok'
Assert.assertEquals(driver.findElement(By.id("result")).getText(), "You clicked: Ok");
// Click on button 'Click for JS Confirm' again
driver.findElement(By.xpath("//button[text()='Click for JS Confirm']")).click();
// Wait for Alert displayed
explicitWait.until(ExpectedConditions.alertIsPresent());
// Switch to alert
alert = driver.switchTo().alert();
Thread.sleep(3000);
// Click Cancel button
alert.dismiss();
// Verify message displayed: 'You clicked: Cancel'
Assert.assertEquals(driver.findElement(By.id("result")).getText(), "You clicked: Cancel");
}
@Test
public void TC_03_Prompt_Alert() throws InterruptedException {
driver.get("http://the-internet.herokuapp.com/javascript_alerts");
driver.findElement(By.xpath("//button[text()='Click for JS Prompt']")).click();
// Wait for Alert displayed
explicitWait.until(ExpectedConditions.alertIsPresent());
// Switch to alert
alert = driver.switchTo().alert();
// Get alert text
String alertText = alert.getText();
// Verify alert text displayed: "I am a JS prompt"
Assert.assertEquals(alertText, "I am a JS prompt");
// Input text to Alert. Ví dụ: “abc”
alert.sendKeys("abc");
Thread.sleep(3000);
// Click Ok button
alert.accept();
Thread.sleep(3000);
// Verify message displayed: 'You entered: abc'
Assert.assertEquals(driver.findElement(By.id("result")).getText(), "You entered: abc");
}
@Test
public void TC_04_Authen_Alert() throws InterruptedException {
String username = "admin";
String password = "admin";
driver.get("http://" + username + ":" + password + "@" + "the-internet.herokuapp.com/basic_auth");
Thread.sleep(3000);
// Get text
String text = driver.findElement(By.tagName("p")).getText();
Assert.assertEquals(text, "Congratulations! You must have the proper credentials.");
}
@AfterClass
public void afterClass() {
driver.quit();
}
}
3. Lời kết
Đến đây thì các bạn có thể handle được 4 loại alert với Selenium rồi đó. Cảm ơn các bạn đã theo dõi bài viết của mình. Chúc các bạn thành công. Hẹn gặp lại các bạn ở những chủ đề tiếp theo. Bái bai.