上传照片按钮无法在Selenium Webdriver中使用
我已经厌倦了
driver.findElement(uploadPhotoBtn).sendKeys("E:\\photo.png");
还尝试了Robot
功能
driver.findElement(uploadPhotoBtn).click();
StringSelection ss = new StringSelection(logoPath);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
相同Robot
功能适用于其他上传按钮,但在尝试使用此处时,.click
无法正常工作,这就是无法使用Robot
功能的原因。
HTML
页面来源:
> <div ng-show="!status.uploading" ng-class="{ '!isMobile':
> 'mewe-type-1' }" class="uploader-able !isMobile"><!-- ngIf: isMobile
> --><!-- ngIf: !isMobile --><button ng-if="!isMobile" class="btn-action radius ng-scope">Upload Photo</button><!-- end ngIf: !isMobile
> --><input capture="camera" accept="image/*" name="image" type="file" fileread="fileread" file="file" class="ng-isolate-scope"></div>
控制台日志:
org.openqa.selenium.WebDriverException:未知错误:元素...是 在点(314,477)处不可点击。其他元素会收到 点击: (会议信息:chrome = 66.0.3359.181)(驱动信息: chromedriver = 2.35.528161
答案 0 :(得分:2)
这是如何添加文件到上传按钮的示例,不太确定按钮的路径是什么,但您必须找到具有<input type="file">
元素的元素并与之交互:
WebElement uploadPhotoBtn = driver.find(By...); //type="file"
File file = new File(path);
uploadPhotoBtn.sendKeys(file.getAbsolutePath());
...如果您有某种预览
,这就是获取源代码的方法 elementPreview.findElement(By.tagName("img")).getAttribute("src");
希望这有帮助,
答案 1 :(得分:1)
有几件事:
1)"Element is not clickable"
错误意味着以某种方式覆盖了上传按钮。这可能是它被禁用,在一些封面后面,或者我最喜欢的,整个页面清除div。确保您尝试单击的按钮真正可用于单击...
2)要使.sendKeys()
生效,您需要指向<input type="file">
元素。根据变量名称,您试图指向<button>
webelement。
答案 2 :(得分:0)
您需要在输入元素中“输入”您的文件。您的上述发送键命令不太正确。
你可以尝试的代码:
driver.findElement(By.xpath("//input[@name="image"]")).sendKeys("Image Path Here") ;
答案 3 :(得分:0)
@ strong> JimEvans 在一篇SO帖子中批评了我的回答,他是 Selenium 网络自动化框架的核心撰稿人。我从他身上学到了一些东西这就是他对<input type="file">
上传按钮所说的话。
如果您尝试上传文件,并且相关页面使用HTML提供的标准上传机制,则可以直接使用Selenium本身执行此操作。标准HTML机制带有<input type="file">
元素。在页面上找到文件上传元素后,即可使用element.sendKeys("full/path/and/file/name/here");
。这在Element Send Keys command of the W3C WebDriver Specification的算法的步骤10中有记录,并在Selenium项目的测试代码example中的几个文件上载测试中使用。
答案 4 :(得分:0)
根据您获得的错误,尝试通过以下任何一种方式解决,替换点击事件:
Actions act = new Actions(wd);
act.moveToElement("Your Webelement").click().perform();
或者您可以使用JavaScript功能
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", "Your Webelement");