无需任何输入即可使用 selenide webdriver 上传文件
Upload file with selenide webdriver without any input
我正在尝试使用 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");
使元素可见但出现未知错误:无法聚焦 element\n ...
我得到了它,但这不是我想要的:
WebElement elem = getWebDriver().findElement(By.cssSelector("[id='file']"));
((RemoteWebElement) elem ).setFileDetector(new LocalFileDetector());
elem.sendKeys("C:FullPath\picture.png");
有没有其他方法可以从这种上传中获取文件?我想从 Intellij 包上传它
WebDriver 仅在 input
和 type=file
的情况下允许使用 sendKeys
进行文件上传。由于 Selenide 只是一个 WebDriver 包装器,它使用相同的技术:https://github.com/codeborne/selenide/blob/8d545daa1286936e2041c1e8dd01801734c7fa39/src/main/java/com/codeborne/selenide/commands/UploadFile.java#L52
如果存在隐藏输入,您可以尝试询问您的开发人员。或者如果是自定义上传器,您可以尝试其他几个选项:
- SikuliX 等 OCR 工具;
- 创建一个带有隐藏输入的后门(向开发人员询问),这会复制原始上传者的行为。
我会选择第二个选项,对于 FE-devs 这应该是一个简单的选项。他们可能会自动删除生产版本中的相应后门。
一个解决方案非常有趣 - Selenide 无法解析 "Evaluate Code Fragment" 模式下的上传。基本上,我的问题也有了答案。
我正在尝试使用 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");
使元素可见但出现未知错误:无法聚焦 element\n ...
我得到了它,但这不是我想要的:
WebElement elem = getWebDriver().findElement(By.cssSelector("[id='file']"));
((RemoteWebElement) elem ).setFileDetector(new LocalFileDetector());
elem.sendKeys("C:FullPath\picture.png");
有没有其他方法可以从这种上传中获取文件?我想从 Intellij 包上传它
WebDriver 仅在 input
和 type=file
的情况下允许使用 sendKeys
进行文件上传。由于 Selenide 只是一个 WebDriver 包装器,它使用相同的技术:https://github.com/codeborne/selenide/blob/8d545daa1286936e2041c1e8dd01801734c7fa39/src/main/java/com/codeborne/selenide/commands/UploadFile.java#L52
如果存在隐藏输入,您可以尝试询问您的开发人员。或者如果是自定义上传器,您可以尝试其他几个选项:
- SikuliX 等 OCR 工具;
- 创建一个带有隐藏输入的后门(向开发人员询问),这会复制原始上传者的行为。
我会选择第二个选项,对于 FE-devs 这应该是一个简单的选项。他们可能会自动删除生产版本中的相应后门。
一个解决方案非常有趣 - Selenide 无法解析 "Evaluate Code Fragment" 模式下的上传。基本上,我的问题也有了答案。