Webdriver.IO无法使用Webdriver.io连续下载文件

时间:2017-07-31 07:23:18

标签: selenium-webdriver automated-tests webdriver-io

我正在使用 Webdriver.io 连续下载文件

我尝试了以下代码:

var webdriverio = require('webdriverio');
var options = {
    desiredCapabilities: {
        browserName: 'chrome'
      //   waitforTimeout: 1000000
    }
};
webdriverio
    .remote(options)
    .init()

    .url('https://xxx')
    .setValue('#username', ‘xxx@gmail.com’)
    .click('#login-submit')
    .pause(1000)
    .setValue('#password’,’12345’)
    .click('#login-submit')
    .getTitle().then(function(title){
     console.log('Title was: ' + title);
    })
    .pause(20000)
    .getUrl().then(function(url){
      console.log('URL: ' + url);
    })
    .getTitle().then(function(title){
     console.log('Title was: ' + title);
    })
    .click("a[href='/wiki/admin'] button.iwdh")
    .getUrl().then(function (url) {
        console.log('URL after settings ' + url);
    })
    .pause(3000)
    .scroll('div.jsAtfH',0,1000)
    .click("a[href='/wiki/plugins/servlet/ondemandbackup/admin']")
    .pause(10000)
  .click('//*[@id="backup"]/a')
  //.pause(400000)
 .end();

注意:文件大小为7GB,下载需要多长时间取决于网络,所以不使用pause()和timeout()有任何方法可以使用webdriver .io或node.js?

3 个答案:

答案 0 :(得分:0)

如果您点击浏览器中的下载按钮并关闭浏览器,那么您的下载也将关闭。如果您拥有点击下载按钮的网站,请尝试重写您拥有可下载网址的代码。然后,您可以搜索模块或从http url下载文件的方式。如果您不是所有者,并且您无法在href中找到网址,那么您可以从检查员的网络部分获取生成的下载网址。

此外,我从未听说过超时后浏览器被关闭了吗?也许它来自webdriver.io我从来没有让我的chrome这么长时间打开webdriver.io
您可以尝试使用Intervall每1分钟作为示例,然后使用webdriver.io命令不要超时。

答案 1 :(得分:0)

首先,当涉及基于Webdriver的自动化框架时,您当前的任务(waiting for a HUUUUGE file to download)不是常见的用例,包括 WebdriverIO 。这样的框架并不意味着下载大量文件。

首先,您将waitforTimeout值与WebdriverIO 测试超时混淆。您的测试在.pause()结束前超时。

目前,您正在通过WebdriverIO测试运行器运行测试。如果您想增加测试超时,则必须使用其他测试框架( Mocha Jasmine Cucumber )并将其timeout值设置为您认为合适的值。继续,我建议你使用 Mocha (来自前任黄瓜家伙)。

您必须安装 Mocha npm install --save-dev wdio-mocha-framework并使用它运行测试。之后您的测试应如下所示:

describe("Your Testsuite", function() {

  it("\nYour Testcase\n", function() {
    return browser
      .url('https://xxx')
      .setValue('#username', ‘xxx@gmail.com’)
      .click('#login-submit')

      // rest of the steps

      .scroll('div.jsAtfH',0,1000)
      .click("a[href='/wiki/plugins/servlet/ondemandbackup/admin']")
      .pause(10000)
      .click('//*[@id="backup"]/a')
  )}
)}

您的配置( wdio.conf.js )应包含以下内容:

framework: 'mocha',

mochaOpts: {
    ui: 'bdd',
    timeout: 99999999
}

作为旁注,我尝试使用上面的配置等待很长时间(> 30 mins)并且没有任何问题。

如果这有帮助,请告诉我。干杯!

答案 2 :(得分:0)

我知道,这是一个非常老的问题,但我想通过评论回答问题(目前还没有这种可能性)。但是我也会回答主要问题。

当我在“ wdio.conf.js”文件中给出超时时,它无法执行 downlaod文件,它关闭会话,但是通过提供.pause(2000000) 在webdriver.io代码中,它可以下载7GB的文件。是什么 如果启动了会话,则在“ wdio.conf.js”文件中使用超时 没有下流?

因此,此超时与测试运行期间的元素状态有关。因此,它“确定实例应等待该元素到达状态的时间”。 https://webdriver.io/docs/timeouts.html-这会有所帮助。但是也要回答这个问题:

此类测试处理的超时更多。就像iamdanchiv为此写的那样,您应该尝试使用自动支持的框架之一,例如Mocha或Jasmine。 现在,IMO最简单的方法是使用WDIO提供的CLI进行快速的全新设置: https://webdriver.io/docs/gettingstarted.html 在这里,您只需选择要使用的其他框架即可。我建议为此使用Jasmine和Chromedriver。比起wdio.conf.js,您可以更改以下部分:

  waitforTimeout: 10000,

  jasmineNodeOpts: {
    // Jasmine default timeout
    defaultTimeoutInterval: 60000,
    //
    },

适合您的事物。或者您可以从wdio页面使用样板项目,如下所示: https://webdriver.io/docs/boilerplate.html

但这还不是全部!仍然需要创建一些方法或函数来检查文件。因此,请检查您将文件下载到哪里或使其下载到您想要的位置,然后创建使用某种等待的方法: https://webdriver.io/docs/api/browser/waitUntil.html

browser.waitUntil(condition, { timeout, timeoutMsg, interval })

因此,您可以在此处或在“ waitforTimeout”的wdio.conf中设置超时。在此方法条件内,您可以使用节点文件系统(https://nodejs.org/api/fs.html)检查文件的状态。

这有助于解决文件状态的等待: https://blog.kevinlamping.com/downloading-files-using-webdriverio/