上传照片按钮无法在Selenium Webdriver中使用

时间:2018-05-24 01:13:25

标签: java selenium selenium-webdriver selenium-chromedriver

上传照片按钮无法在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

5 个答案:

答案 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");