如何用Assert验证URL是否包含指定字符(OrangeHRM自动化测试)
Selenium登录后断言URL包含指定字符串的代码优化
测试需求
- 登录地址:
https://opensource-demo.orangehrmlive.com/web/index.php/auth/login - 登录凭据:用户名
Admin,密码admin123 - 验证逻辑:登录成功后,断言当前URL包含
dashboard字符串,包含则测试通过,否则失败
原始代码
WebDriverManager.chromedriver().setup(); WebDriver driver = new ChromeDriver(); // LOGIN THE ORANGE HR driver.get("https://opensource-demo.orangehrmlive.com/web/index.php/auth/login"); driver.manage().window().maximize(); Thread.sleep(1000); driver.findElement(By.name("username")).sendKeys("Admin"); driver.findElement(By.name("password")).sendKeys("admin123"); driver.findElement(By.xpath("//button[@class='oxd-button oxd-button--medium oxd-button-- main orangehrm-login-button']")).click(); Thread.sleep(1000); String URL = driver.getCurrentUrl(); boolean ExpectedURL = URL.contains("dashboard"); Assert.assertTrue(ExpectedURL, URL);
优化后的代码
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; 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 io.github.bonigarcia.wdm.WebDriverManager; import java.time.Duration; public class OrangeHRMLoginTest { public static void main(String[] args) { // 初始化浏览器驱动 WebDriverManager.chromedriver().setup(); WebDriver driver = new ChromeDriver(); driver.manage().window().maximize(); // 设置全局隐式等待 driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); try { // 打开登录页 driver.get("https://opensource-demo.orangehrmlive.com/web/index.php/auth/login"); // 输入用户名和密码 driver.findElement(By.name("username")).sendKeys("Admin"); driver.findElement(By.name("password")).sendKeys("admin123"); // 点击登录按钮(修复XPath换行问题) WebElement loginBtn = driver.findElement(By.xpath("//button[@class='oxd-button oxd-button--medium oxd-button--main orangehrm-login-button']")); loginBtn.click(); // 显式等待页面跳转完成,直到URL包含dashboard WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); wait.until(ExpectedConditions.urlContains("dashboard")); // 执行断言,添加自定义失败提示 String currentUrl = driver.getCurrentUrl(); Assert.assertTrue(currentUrl.contains("dashboard"), "登录后未跳转到Dashboard页面,当前URL:" + currentUrl); } finally { // 确保浏览器关闭,避免资源泄漏 driver.quit(); } } }
关键优化说明
- 替换固定等待为显式等待:
Thread.sleep是固定时长等待,页面加载慢时会失效,用WebDriverWait等待URL包含目标字符串,适配不同加载速度,更稳定。 - 修复XPath语法错误:原始代码中XPath被换行分割,会导致元素定位失败,优化后合并为完整的XPath语句。
- 简化断言逻辑:直接在
Assert.assertTrue中完成判断,无需额外变量,同时添加自定义失败提示,便于快速排查问题。 - 补充必要依赖导入:包含所有运行必需的类导入,新手可直接复制运行。
- 添加资源回收逻辑:用
finally块确保浏览器无论测试结果如何都会关闭,避免残留进程。
内容的提问来源于stack exchange,提问作者chinmay k
相关产品推荐
相关产品推荐

