通过selenium上传文件但隐藏文件输入元素

时间:2013-02-26 17:36:26

标签: file-upload selenium hidden-field

我正在尝试使用Selenium上传文件,但我的输入文件元素已隐藏。

我隐藏的HTML是:

<input id="yui_3_9_0pr3_1_1361897421363_2239" type="file" style="visibility:hidden; width:0px; height: 0px;" multiple="" accept="">

并且选择文件按钮HTML为:

<button id="yui_3_9_0pr3_1_1361897421363_2242" class="yui3-button" tabindex="0" aria-label="Select Files" role="button" type="button" style="width: 100%; height: 100%;">Select Files</button>

我使用您建议的JavascriptExecutor尝试了相同的操作,但它仍然提供了异常ElementNotVisible: Element is not currently visible

这是我的代码:

WebElement fileInput = driver.findElement(By.xpath(//@input[@type='file']));
System.out.println("h14");
String js = "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';";
((JavascriptExecutor) driver).executeScript(js, fileInput);
System.out.println("h15");
LocalFileDetector detector = new LocalFileDetector();
String path = "//Users//pdua//Desktop//images.jpeg";

// File f = detector.getLocalFile(path);
//((RemoteWebElement)fileInput).setFileDetector(detector);
System.out.println("h16");

//fileInput.sendKeys(f.getAbsolutePath());
fileInput.sendKeys(path);

隐藏输入文件元素的XPath是//input[@type='file']。不确定这是否正确!

1 个答案:

答案 0 :(得分:1)

如果元素不可见和/或不显示,则硒不会与元素交互。这可能是由于各种设置引起的:

  • visibility=hidden;
  • display=none;
  • height=0width=0;
  • 在可显示坐标之外的位置(例如,left = -1)

在您的代码中,您显示heightwidth等于0,但仅重置height。尝试跟随JS:

String js = "arguments[0].style.height='1'; arguments[0].style.width='1'; "
            + "arguments[0].style.visibility='visible';";

此外,请在浏览器中检查input[@type='file']元素,以检查是否应用了其他任何可影响可见性的样式或类。在我的情况下,有一个类应用于button包装input[@type='file']元素并设置display=none;

注意::更改元素可见性时,该测试正在修改该测试下的应用程序。不建议在测试中使用这种侵入性行为。

更新:它显示在屏幕外部的元素(例如left=-1200)被报告未显示在Selenium中,但它不会阻止Selenium在其上执行sendKeys()方法。该方法没有返回类型,在这种情况下不会出现异常。