You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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();
        }
    }
}

关键优化说明

  1. 替换固定等待为显式等待:Thread.sleep是固定时长等待,页面加载慢时会失效,用WebDriverWait等待URL包含目标字符串,适配不同加载速度,更稳定。
  2. 修复XPath语法错误:原始代码中XPath被换行分割,会导致元素定位失败,优化后合并为完整的XPath语句。
  3. 简化断言逻辑:直接在Assert.assertTrue中完成判断,无需额外变量,同时添加自定义失败提示,便于快速排查问题。
  4. 补充必要依赖导入:包含所有运行必需的类导入,新手可直接复制运行。
  5. 添加资源回收逻辑:用finally块确保浏览器无论测试结果如何都会关闭,避免残留进程。

内容的提问来源于stack exchange,提问作者chinmay k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:07:38