【问题标题】:Automate upload file scenario of anchor tag锚标签自动上传文件场景
【发布时间】:2020-02-24 20:50:42
【问题描述】:

我正在尝试使用不同的断言组合来自动化具有与文件上传相关的多个场景的行为。 UI中有一个锚标记而不是输入标记,为什么我不能使用发送键来上传文件。我不想使用 AutoIT、Sikuli 之类的工具,因为它们与云环境中的远程执行不兼容,并且会增加额外的库责任。

这是一个 Angular js 应用程序,DOM 代码是

---"a href="javascript:void(0)" title="选择要上传的文件" class="btn btn-blue" ng-show="fileUploadSubmitted" id="file_input_btn" ng-click= “上传文件附件()”

我试图找到:- 1:Angular js库的任何内置上传功能,以便我可以通过javascript执行器执行它。 2:Sikuli 和 AutoIt 正在工作,但那将是最后的解决方案 3:尝试编辑标签名称以在 DOM 中输入类型文件,后跟发送键,但它不起作用

【问题讨论】:

  • 根据我的经验,总是有一个 INPUT type=file 元素......有时它只是隐藏起来。看看你是否能找到它并发布相关的 HTML 以及你的代码尝试。
  • @JeffC 我也同意 DOM 中总是有一个隐藏元素,但就我而言,它不存在。好像所有的事情都在事件函数中处理了
  • @JeffC 说INPUT 类型文件按钮用户无法点击,在这种情况下使用javascript 代码点击该按钮.. 可能对您有帮助...WebElement link_Home = driver.findElement(By.xpath("//input[@type='file']")); ((JavascriptExecutor)driver).executeScript("arguments[0].click();",link_Home);

标签: javascript java selenium


【解决方案1】:

你能试试下面的方法吗?

Tested locally not on the server.

# get the button element
ele = driver.find_element_by_id("file_input_btn")
# add a hidden file input ( might have to change the onchange event based on the events associated to the button in above line as you don't have a form)
driver.execute_script("var x=  document.createElement('INPUT');x.setAttribute('type', 'file'); x.setAttribute('onchange','this.form.submit()');x.setAttribute('hidden', 'true'); arguments[0].appendChild(x);",ele)
# send the file path here ( this should upload the file)
driver.find_element_by_xpath("//input[@type='file']").send_keys("file path should go here")

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 2013-07-07
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 2022-01-22
    • 2013-11-10
    • 1970-01-01
    • 2016-10-30
    相关资源
    最近更新 更多