【问题标题】:How to close file upload dialogue after click on upload button in protractor单击量角器中的上传按钮后如何关闭文件上传对话框
【发布时间】:2017-12-08 23:22:50
【问题描述】:

我想在量角器中上传图像文件。问题是如果不点击上传按钮,我无法获取"input[type = "file"]" 元素。

当我点击上传按钮时,文件上传对话框弹出。

我试过了

browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); 但它不起作用。

这就是我正在做的:

var image = '../images/image1.png';
var absPathImg = path.resolve(__dirname, image);
element(by.id('uploadImage')).click();
browser.actions().sendKeys(protractor.Key.ESCAPE).perform();
element(by.css('input[type=file]')).sendKeys(absPathImg);
element(by.id('upload')).click();

如何关闭该文件上传对话框以上传图片?

【问题讨论】:

    标签: selenium-webdriver protractor angularjs-e2e e2e-testing


    【解决方案1】:

    这是一个旧线程,但如果其他人遇到这个问题,我会回答。

    我今天必须解决同样的问题。我能够解决打开上传对话框的问题,因为我很确定如果没有一些外部库就无法关闭它,而且在无头模式下也无法工作。

    在将密钥发送到文件输入之前,您需要检查链接到上传按钮的点击事件的 javascript 并执行一些脚本。

    这对每种情况都是单独的,但在我的情况下,我必须这样做(Python):

    script = (
            "var url = '/Contacting/UploadCsv'; "
            "$('#buttonFileUpload').data('url', url);"
            )
    driver.execute_script(script)
    driver.find_element_by_id('buttonFileUpload').send_keys(csv_path)
    

    我从链接到按钮的 JS 函数中选择了该脚本。

    【讨论】:

      【解决方案2】:

      像这样试试。我将它用于量角器,但我认为它与 Selenium 相似。 我也有一个问题是 Windows 文件对话框没有关闭。 我就是这样解决的:

      element(by.css('elementForOpenDialog')).sendKeys(absPathImg);

      向将打开文件对话框的元素发送密钥,而不是单击元素以打开文件对话框。只需发送到该元素的绝对路径,它将在不打开对话框的情况下上传。 它对我有用。祝你好运!

      【讨论】:

      • 这是避免操作系统对话的方法。但就我而言,您必须单击按钮才能上传图片。当您单击上传按钮时,会弹出操作系统对话框。这是我的原型。我必须关闭操作系统对话。如果不这样做,我无法将路径发送到元素。
      • 我明白了。我在操作系统对话方面遇到了同样的问题,我通过避免对话解决了这个问题。
      【解决方案3】:

      与其点击ESCAPE,不如模拟ENTER按键来模拟人进入路径并按下ENTER按键上传图片。

      我正在我的代码中执行此操作,并且效果很好。

      var path = require('path')
      this.fileUploadOne = element(by.css('locator_to_element'));
      
      var fileUpload = 'path_of_file_to_upload'
      
          absolutePath = path.resolve(__dirname,fileUpload);
          console.log(absolutePath);
          this.fileUploadOne.sendKeys(absolutePath);
          browser.actions().sendKeys(protractor.Key.ENTER).perform();
      
          //just for debugging purposes.
          browser.sleep(20000);
      

      【讨论】:

      • 如上所述,元素“element(by.css('locator_to_element'));”可以在关闭文件上传操作系统对话框后呈现。在调用一些浏览器操作之前,我必须关闭它。
      猜你喜欢
      • 1970-01-01
      • 2013-01-28
      • 2018-03-26
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      相关资源
      最近更新 更多