0

我正在使用 PhantomJS 1.9.8 和 Selenium 2.42.2 运行一个简单的登录测试。一切都是用 maven 设置的,我使用的是嵌入式 Jetty 8.1.14.v20131031。

在启动码头之前,我还将所有的 webjars 添加到 org.eclipse.jetty.webapp.WebAppContext#setExtraClasspath

我的 login.jsp 使用 webjars 来引用 jquery。

<script src="webjars/jquery/1.10.2/jquery.js"></script>

当我运行测试时,出现以下错误:

Session [81d93a00-9101-11e5-bc34-79a9cbd8ffe4] - page.onError - msg: ReferenceError: Can't find variable: $

如果我将 login.jsp 更改为测试通过的完整 URL。

<script src="https://code.jquery.com/jquery-1.10.2.js"></script>

是 PhantomJS 从 webjars 读取时出现问题,还是 Jetty 没有为它们提供服务?

4

1 回答 1

1

关键是遍历 webjar 并将每个都添加为类路径资源。

//Ensure that webjars are visible as they are packaged in META-INF/resources
ResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver();
Resource[] webjarResources = patternResolver.getResources("classpath*:/META-INF/resources");
String[] resources = new String[webjarResources.length + 1];
for(int i = 0; i < webjarResources.length; i++) {
  Resource webjarResource = webjarResources[i];
  resources[i] = webjarResource.getURI().toString();
}

//Try to find the webapp source regardless of the current working directory
URL resource = this.getClass().getClassLoader().getResource("app.properties");
String resourcePath = resource.getPath();
String root = resourcePath.substring(0, resourcePath.lastIndexOf("myapp"));
String path = root + "myapp/src/main/webapp";
File webAppDir = new File(path);

resources[resources.length - 1] = webAppDir.getAbsolutePath();
webapp.setBaseResource(new ResourceCollection(resources));
于 2015-11-23T02:27:47.260 回答