【发布时间】:2012-06-25 09:40:44
【问题描述】:
我们使用 Jenkins-Slave 来执行 Selenium Gui 测试。从站使用 WebStart 启动并在 Windows 7 机器上运行。该测试包含下载 PDF 文件,应通过查找其中的文本来检查其是否存在以及正确性。问题是,正在运行的 Selenium 测试看不到 firefox 下载的文件。实际上该进程似乎没有在目录中看到任何文件。
如果我在本地机器上直接从 IDE 执行测试,而不是使用 Jenkins 或 WebStart,测试运行得很好。
我已经考虑过以下几点:
- 我是否检查了错误的目录?不,我将
file.getAbsolutePath()复制到Windows 资源管理器并可以看到这些文件。我也很确定我在正确的机器上。 -
这是时间问题吗?例如。文件没有下载完成吗?不,我使用 WebDriverWait 并等待 30 秒来查找文件,而实际上创建和下载 PDF 需要大约 1 秒:
WebDriverWait wait = new WebDriverWait(driver, 30, 1000); wait.until(new Predicate<WebDriver>(){ public boolean apply(WebDriver driver){ try{ log.info("file: " + pdfFile.getAbsolutePath() + ", exists: " + pdfFile.exists() + ", size: " + pdfFile.length()); // test files content ... } catch (IOException e){ return false; } } });
有没有人知道可能出了什么问题?欢迎大胆猜测......
更新 我检查了 jenkins.jnlp 文件,它包含“所有权限”,因此它应该能够访问文件系统。
<security>
<all-permissions/>
</security>
更新 2 为了清楚起见:我使用 Jenkins 运行 Selenium 测试。 Selenium 远程控制 Firefox,同时下载 PDF 文件。问题是,Java 进程,例如我的测试类找不到文件。
【问题讨论】:
-
我接受,WebStart 的sandbox 设置允许下载。 如果是这样:记录的 pdfFile 路径是否正确?存在总是假的吗? pdfFile.canRead() 怎么样? (通常我的猜测是系统属性
user.dir在 IDE 和独立版本中有所不同。) -
我认为这不是问题。 Jenkins Slaves 包含所有权限(更新了我的问题以明确这一点),我认为如果由于缺少权限而无法访问该目录,我会得到一个异常。 user.dir 也是一个合理的猜测,但是,当我记录 file.getAbsolutePath 时,它应该是正确的。无论两台机器上是否不同。
-
你在用PersistenceService;看到here for an example?使用 FileContents i.o.文件。罐子签名我也会这样做。
-
我认为你弄错了@JoopEggen。我不使用 WebStart 应用程序来存储文件。 WebStart 用于启动 Jenkins-Slave。该从站执行 Selenium 测试,该测试驱动 Firefox,从而使用 Firefox 生成和下载 PDF 文件。我更新了我的问题以明确这一点。
标签: java windows jenkins java-web-start