首页 > 解决方案 > 如何在 selenium hub 中运行测试时上传文件

问题描述

我正在使用 selenium 测试一个 Web 应用程序,作为测试的一部分,我需要上传一个文档。当我单击一个名为“ filelabel”的按钮时,它会打开一个基于 Windows 的弹出窗口,此时用户可以浏览到 id 并单击打开,然后附加文档。我正在使用 chrome 驱动程序。

我尝试了 2 种方法

  1. Autoit: 当我在本地运行测试时,我已经创建了一个 exe 并且测试运行成功。但是我需要通过 Jenkins 构建在 selenium hub 中运行测试,并且我没有运行 exe 的权限。获取权限被拒绝错误

  2. 尝试使用以下代码进行远程文件上传,结果出现'unable to focus element;'异常。我认为控件没有被转移到基于窗口的弹出窗口,因此我得到了这个异常

//远程上传

driver.findElement(By.name("fileLabel")).click();
driver.setFileDetector(new LocalFileDetector());

WebElement upload = driver.findElement(By.name("fileLabel"));

logger.logp(Level.INFO, this.getClass().getSimpleName(), "filelabel found", "file label found");

upload.sendKeys("./datafiles/myid.jpg");

logger.logp(Level.INFO, this.getClass().getSimpleName(), "id uploaded", "id uploaded");
  1. 我还阅读了有关使用机器人课程的信息。但看起来我将不得不通过绝对路径。不确定它是否可以在集线器中工作

该文件没有被上传。我正在寻找一种可行的解决方案来在 selenium hub 中运行测试时上传文件

标签: selenium

解决方案


使用方法 2 对问题进行排序。我无法关注元素异常,因为我没有单击 type=file 的元素。

然后使用下面的代码

driver.setFileDetector(new LocalFileDetector());
WebElement upload = driver.findElement(By.id("idDocumentFile"));
String currPath = System.getProperty("user.dir");
File imgFile = new File(currPath +"/datafiles/myid.pdf");
upload.sendKeys(imgFile.getAbsolutePath());

推荐阅读