1

我正在尝试使用 java selenide 自动化测试上传文件。

我写测试的地方使用上传框,附近没有任何输入值。

上传框是id='file'

我尝试使用:

$(By.cssSelector("[id='file']")).uploadFile(new File("myfilePackage" + File.separator + "picture.jpg"))

但这无济于事,因为没有用于文件上传的输入框。

然后我尝试使用:

WebElement elem = getWebDriver().findElement(By.cssSelector("[id='file']"));
String js = "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';";

((JavascriptExecutor) getWebDriver()).executeScript(js, elem);
elem.sendKeys("wholePath\\picture.png");

使元素可见,但出现未知错误:无法聚焦元素\n ...

我得到了它,但这不是我想要的:

WebElement elem = getWebDriver().findElement(By.cssSelector("[id='file']"));

((RemoteWebElement) elem ).setFileDetector(new LocalFileDetector());

elem.sendKeys("C:FullPath\\picture.png");

有没有其他方法可以从这种上传中获取文件?我想从 Intellij 包上传它

4

2 回答 2

0

一个解决方案非常有趣 - Selenide 无法在“评估代码片段”模式下解决上传问题。基本上,我的问题也回答了。

于 2017-09-27T15:02:47.417 回答
0

WebDriversendKeys仅在input使用type=file. 由于 Selenide 只是一个 WebDriver 包装器,它使用相同的技术:https ://github.com/codeborne/selenide/blob/8d545daa1286936e2041c1e8dd01801734c7fa39/src/main/java/com/codeborne/selenide/commands/UploadFile.java#L52

您可以尝试询问您的开发人员,是否存在隐藏的输入。或者,如果是自定义上传器,您可以尝试其他几个选项:

  • SikuliX 等 OCR 工具;
  • 创建一个带有隐藏输入的后门(向开发人员询问),它复制了原始上传者的行为。

我会选择第二个选项,至于 FE-devs 应该是一个简单的选项。他们可能只是自动删除生产版本中的相应后门。

于 2017-08-15T13:51:48.930 回答