单击使用水豚的无头自动化上的元素时,无法调用ajax函数

问题描述 投票:0回答:1

我有一个链接元素,当用户/自动单击链接时,它将下载文件,该链接是这样的:

<a target="_blank" href="#!" class="downloadFileAws" data-file="report2020-05-20_2020-05-20_jbkd2a1jYFFTyEEUrjiiQBLCQHsjWqj21375.xls" data-path="report">here</a>

当自动化单击该链接时,它将调用ajax函数,如下所示:

$('body').on('click', '.downloadFileAws', function(e){
  e.preventDefault();
  var $this = $(this);
  $this.addClass('disabled');
  var folderName =  $this.attr('data-path');
  var fileName =  $this.attr('data-file');
  $.ajax({
    type: 'POST',
    url : $('#getUrlFileAws').val(),
    data: {
      folderName  : folderName,
      fileName    : fileName
    },
    dataType:'JSON',
    success: function (data)
    {
       $this.removeClass('disabled')
       if(data.status === 'success')
       {
          window.open(data.url,'_blank');
       }
       else
       {
          Materialize.toast('File Not Found.<i class="fa fa-times ml25"></i>', 3000,'red accent-4');
       }
    }
  });
})

该ajax函数未直接附加在html页面上,而是位于名为“ mainscript.js”的javascript文件中。并将文件附加在html页面底部,如下所示:

<script type="text/javascript" src="/assets/js/mainscript.js?v=100000301"></script>

但是,当无头自动化尝试单击link元素时,不会调用ajax函数。我尝试用不同的方式点击,例如:

find(:css, 'a.downloadFileAws').click

page.execute_script('$("a.downloadFileAws").click()')

但是似乎没有人能正常工作,我试图在非无头模式下运行自动化,并且它像超级按钮一样工作,下载的文件显示在自动化项目目录中的下载目录中。

这里,我将为您提供有关env.rb中无头配置的其他信息:

Capybara.register_driver :chrome_headless do |app|
  options = Selenium::WebDriver::Chrome::Options.new
  options.add_argument('--headless')
  options.add_argument('--no-sandbox')
  options.add_argument('--disable-gpu')
  options.add_argument('--disable-dev-shm-usage')
  options.add_preference(
    :download,
    directory_upgrade: true,
    prompt_for_download: false,
    default_directory: File.absolute_path('./features/data/files/downloaded')
  )
  options.add_preference(:browser, set_download_behavior: { behavior: 'allow' })
  options.add_preference(:plugins, always_open_pdf_externally: true)

  capabilities = {
    chromeOptions: {
      w3c: false
    }
  }

  Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    desired_capabilities: capabilities,
    options: options
  )
end

任何帮助都会非常感激,因为我已经困扰这个问题好几天了,所以谢谢大家。

jquery ajax selenium capybara google-chrome-headless
1个回答
0
投票

下载行为必须根据Chrome版本和模式(无头和无头)进行不同的设置。使用Capybara用于其自己的测试的配置应该可以在两种模式下的任何最新版本中使用-参见https://github.com/teamcapybara/capybara/blob/master/spec/selenium_spec_chrome.rb#L13

您也不应该再使用desired_capabilities了,除非您使用的是旧版Chrome,否则您绝对应该停止禁用w3c模式,在这种情况下,无头模式下的下载可能根本无法进行。

© www.soinside.com 2019 - 2024. All rights reserved.