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

如何将Excel第1列URL传入driver.get()并断言第2列预期URL?

解决URL重定向验证的Excel数据驱动测试问题

我看了你的代码,发现几个关键问题需要调整,同时帮你实现预期的URL重定向验证逻辑。TestNG的DataProvider其实已经帮我们做好了数据遍历的工作,不需要自己写循环,下面是修正后的完整代码和详细说明:

修正后的完整代码

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
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.DataProvider;
import org.testng.annotations.Test;

public class UrlRedirectCheck {
    private WebDriver driver;
    private WebDriverWait wait;

    @BeforeClass
    public void testSetup() {
        driver = new FirefoxDriver();
        driver.manage().window().maximize();
        wait = new WebDriverWait(driver, 10); // 延长等待时间应对慢加载场景
    }

    // DataProvider会自动把Excel每行数据传入这个测试方法,无需手动循环
    @Test(dataProvider = "Urls")
    public void verifyRedirectURL(String originalUrl, String expectedRedirectUrl) {
        // 访问Excel第0列的原始URL
        driver.get(originalUrl);
        
        // 可选:等待跳转完成(推荐添加,避免页面未加载完就获取URL)
        // wait.until(ExpectedConditions.urlContains(expectedRedirectUrl));
        
        // 获取实际跳转后的URL
        String actualRedirectUrl = driver.getCurrentUrl();
        
        // 断言实际URL与Excel第1列的预期URL是否一致
        Assert.assertEquals(actualRedirectUrl, expectedRedirectUrl, 
            "跳转验证失败:原始URL[" + originalUrl + "] 实际跳转到[" + actualRedirectUrl + "],预期为[" + expectedRedirectUrl + "]");
    }

    @DataProvider(name = "Urls")
    public Object[][] milbURL() {
        // 替换成你的Excel文件绝对路径,比如 "C:/test/redirects.xls"
        return getExcelData("<你的Excel文件路径>", "Sheet1");
    }

    /**
     * 读取Excel数据,返回二维数组供DataProvider使用
     * @param fileName Excel文件路径
     * @param sheetName 工作表名称
     * @return 二维数组,每行对应Excel的一行数据(跳过表头行)
     */
    private String[][] getExcelData(String fileName, String sheetName) {
        String[][] arrayExcelData = null;
        // 使用try-with-resources自动关闭文件流,避免资源泄漏
        try (FileInputStream fs = new FileInputStream(fileName)) { 
            Workbook wb = Workbook.getWorkbook(fs);
            Sheet sh = wb.getSheet(sheetName);
            
            int totalCols = sh.getColumns();
            int totalRows = sh.getRows();
            
            // 跳过Excel表头(第一行),所以行数是totalRows-1
            arrayExcelData = new String[totalRows - 1][totalCols];
            
            for (int i = 1; i < totalRows; i++) {
                for (int j = 0; j < totalCols; j++) {
                    // jxl的getCell是(列索引, 行索引),这里去除内容首尾空格避免意外错误
                    arrayExcelData[i - 1][j] = sh.getCell(j, i).getContents().trim();
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            throw new RuntimeException("未找到指定Excel文件:" + fileName);
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("读取Excel文件时发生IO错误");
        } catch (BiffException e) {
            e.printStackTrace();
            throw new RuntimeException("Excel文件格式错误(仅支持.xls格式)");
        }
        return arrayExcelData;
    }

    // 测试完成后关闭浏览器,用@AfterClass确保只执行一次
    @AfterClass
    public void tearDown() {
        if (driver != null) {
            driver.quit();
        }
    }
}

关键调整说明

  1. 移除冗余内部类:把ReadExcelDataProvider内部类去掉,所有方法直接放在主类中,避免类结构混乱。
  2. 修正注解错误:
    • 去掉getExcelData和tearDown上的@Test注解,前者是辅助方法不需要作为测试用例,后者改用@AfterClass确保测试结束后只执行一次浏览器关闭操作。
  3. 利用DataProvider自动遍历数据:
    • DataProvider会自动读取Excel的每一行数据(跳过表头),逐个传入verifyRedirectURL方法,完全不需要自己写for循环。
    • 方法参数originalUrl对应Excel第0列的待访问URL,expectedRedirectUrl对应第1列的预期跳转URL。
  4. 优化验证逻辑:
    • 添加可选的等待条件,确保页面跳转完成后再获取当前URL,避免因页面加载慢导致断言失败。
    • 断言时添加自定义错误信息,方便快速定位哪条URL的跳转验证失败。
  5. 提升代码健壮性:
    • 使用try-with-resources自动关闭文件流,避免资源泄漏。
    • 对Excel读取的内容调用trim(),去除首尾空格,避免因Excel中不小心输入的空格导致断言失败。
    • 异常处理中抛出运行时异常,确保Excel读取失败时直接终止测试,避免后续无效执行。

使用注意事项

  • 确保项目已引入jxl(仅支持.xls格式)、TestNG和Selenium的依赖;如果需要支持.xlsx格式,可以改用Apache POI库。
  • 替换代码中的<你的Excel文件路径>为实际的Excel文件绝对路径。
  • 如果跳转加载较慢,可以调整WebDriverWait的等待时间,或者添加更具体的等待条件(比如等待目标页面的某个元素出现)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:22:19