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

如何通过SoapUI的Groovy脚本使用HtmlUnitDriver运行无头浏览器自动化脚本?

解决SoapUI Groovy脚本中HtmlUnitDriver的BrowserVersion.CHROME报错问题

你遇到的这个MissingPropertyException其实是版本不兼容导致的,咱们一步步拆解问题和解决方案:

问题根源

你当前使用的是selenium-htmlunit-driver-2.51.0,这个版本对应的HtmlUnit库中,BrowserVersion类并没有CHROME这个通用静态常量。早期的HtmlUnit对Chrome的模拟是按具体浏览器版本号来命名常量的(比如CHROME_60、CHROME_59),CHROME这个简化常量是在后续更高版本的HtmlUnit中才新增的。

可行解决方案

方案1:升级依赖jar包到兼容版本

最简单的解决方式是把selenium-htmlunit-driver升级到支持BrowserVersion.CHROME的版本,比如2.52.0及以上(建议和你的selenium-server-standalone版本尽量匹配,比如用3.141.59版本的selenium-server搭配2.52.0+的htmlunit-driver)。

操作步骤:

  • 下载对应版本的selenium-htmlunit-driver jar包
  • 替换SoapUI安装目录bin/ext下的旧jar文件
  • 重启SoapUI,然后重新运行你的原脚本,BrowserVersion.CHROME就能正常识别了

方案2:使用现有版本支持的Chrome版本常量

如果暂时不想升级jar包,你可以替换成当前版本BrowserVersion类中存在的Chrome具体版本常量。比如在2.51.0版本中,你可以改成:

HtmlUnitDriver driver = new HtmlUnitDriver(BrowserVersion.CHROME_60);

你可以通过查看该版本BrowserVersion的源码或官方API文档,确认具体可用的版本常量名称。

方案3:手动构建Chrome兼容的BrowserVersion实例

如果找不到合适的预定义常量,还可以手动构建一个模拟Chrome的浏览器版本实例:

// 基于现有Chrome版本模板构建自定义实例
BrowserVersion chromeVersion = new BrowserVersion.BrowserVersionBuilder(BrowserVersion.CHROME_60)
    .setApplicationVersion("60.0.3112.113") // 自定义Chrome版本号
    .build();
HtmlUnitDriver driver = new HtmlUnitDriver(chromeVersion);

额外推荐:用ChromeDriver无头模式替代

其实你已经能正常运行ChromeDriver了,完全可以开启Chrome的无头模式来实现无头自动化,这种方式更贴近真实浏览器行为,避免HtmlUnit对某些JS特性兼容不佳的问题。修改后的脚本如下:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.By;
import java.util.concurrent.TimeUnit;

loginApp()

public void loginApp() {
    System.setProperty("webdriver.chrome.driver","D:\\SoapUI-5.2.1\\bin\\ext\\chromedriver.exe")
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--headless"); // 开启无头模式
    options.addArguments("--disable-gpu"); // Windows环境下建议添加,避免渲染问题
    WebDriver driver = new ChromeDriver(options);
    
    driver.setJavascriptEnabled(true);
    driver.get("MyURL")
    driver.manage().timeouts().implicitlyWait(120, TimeUnit.SECONDS);
    driver.findElement(By.id("username")).sendKeys("1234567");
    driver.findElement(By.id("password")).sendKeys("1234567");
    driver.findElement(By.id("submit")).submit();
    driver.manage().timeouts().implicitlyWait(120, TimeUnit.SECONDS);
    log.info("Page title is: " + driver.getTitle());
}

注意事项

  • 替换jar包后必须重启SoapUI,确保新的类文件被加载
  • 保持selenium相关jar包版本一致,避免依赖冲突
  • 如果选择HtmlUnitDriver,注意它对复杂JS页面的兼容性可能不如真实Chrome

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:30:03