javascript - 如果 &lt;input&gt; 元素不可见且仅由 anchor 标记 <a> 引用,我如何设置上传文件的路径?

标签 javascript webdriver anchor automated-tests

使用 WebDriver,如果元素的类型为 type="file",我通常只需将 .sendKeys() 直接发送到元素即可,效果非常好。

不幸的是,我现在的情况是使用了一个自定义按钮,它有一个引用输入元素的 anchor 标记:

//anchor tag which is a custom button referring to non visible file input element
    <a id="image-upload-button" class="control_button button" href="#/create_channel/addImage" data-ember-action="151">

//refers to this file input element which is not visible
    <input id="image-selector-button" name="image-selector" type="file" class="selectImageBtn" {{action "selectImage" on="change" target="view"}} {{action "onBlur" on="blur" target="App.router.imageSelectorView"}} {{action "onFocus" on="focus" target="view"}}/>

在这种情况下,sendKeys() 对 anchor 标记不起作用:

driver.findElement(By.id("image-upload-button ")).sendKeys(“c:\\myFile.bmp”);

错误: org.openqa.selenium.WebDriverException: focusElement 执行失败;无法发送 key ,因为无法聚焦元素

sendKeys() 也不对不可见的文件输入元素起作用:

driver.findElement(By.id("image-selector-button ")).sendKeys(“c:\\myFile.bmp”);

错误: org.openqa.selenium.ElementNotVisibleException:必须显示元素才能单击

我已经尝试通过几种不同的方式(见下文)注入(inject) javaScript 来设置不可见输入元素上的路径值,但似乎没有任何效果。关于如何设置这条路径的任何想法?

//nothing happens when I try this

JavascriptExecutor js = (JavascriptExecutor) driver;

js.executeScript("window.document.getElementById('image-selector-button').setAttribute('value','C:\\MyFile.jpg');");  



//I tried firing a change even first as well and that didn't appear to do anything either

js.executeScript(
"var el=document.getElementById('image-selector-button'); " +
" function fire(evttype) { " +
" if (document.createEvent) { " +
" var evt = document.createEvent('HTMLEvents'); " +
" evt.initEvent( evttype, false, false); "+
" el.dispatchEvent(evt); " +
" } else if (document.createEventObject) { "+
"  el.fireEvent('on' + evttype); " +
" }    }; " +
" fire(el,'change'); " );

如有任何帮助或建议,我们将不胜感激!

最佳答案

尝试先显示控件,然后设置值,再隐藏:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('image-selector-button').style.display = 'block';");
driver.findElement(By.id("image-selector-button ")).sendKeys("c:\\myFile.bmp");
js.executeScript("document.getElementById('image-selector-button').style.display = 'none';");

关于javascript - 如果 &lt;input&gt; 元素不可见且仅由 anchor 标记 <a> 引用,我如何设置上传文件的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15341680/

相关文章:

javascript - 如何合并营业时间相似的日子

html - 使用 Selenium WebDriver (Java) 在笔记本 (HTML5) 上翻页

java - 如何使用 Selenium WebDriver 获取 HTTP 响应代码

php - 使用 anchor 标记将值传递到下一页

javascript - 使用 anchor 到达页面时触发事件

javascript - Socket.io broadcast.to 不工作但 broadcast.emit 不工作

javascript - JavaScript 中 "==="运算符的名称是什么

javascript - 找出容器中最后一个不完整文本行的长度

java - Webdriver TestNG 空指针异常

html - 固定顶部菜单栏重叠内联超链接跳转