【问题标题】:Webdriver.IO not able to download file continuously using Webdriver.ioWebdriver.IO 无法使用 Webdriver.io 连续下载文件
【发布时间】:2017-07-31 07:23:17
【问题描述】:

我正在使用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 ?

【问题讨论】:

  • Priyanka,我会回答你的问题,但我需要你提供更多信息。 WebdriverIO 有多种类型的timeouts(参见here),每种都有自己的用途。你是如何开始你的测试的? (通过哪个命令)您是否使用测试框架来编写/运行测试,如果是,是哪个? (例如:黄瓜、茉莉、摩卡)。您可能使用了错误的工具来完成这项工作。文件大小也令人讨厌。

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


【解决方案1】:

首先,当涉及到基于 Webdriver 的自动化框架(包括 WebdriverIO)时,您当前的任务 (waiting for a HUUUUGE file to download) 并不是一个常见的用例。此类框架不适合下载大量文件。


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

目前,您正在通过 WebdriverIO 测试运行器运行测试。如果要增加测试超时,则必须使用不同的测试框架(MochaJasmineCucumber)并设置它的timeout 值与您认为合适的值相符。接下来,我建议您使用 Mocha(来自一个前Cucumber 人)。

您必须安装 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)并且没有任何问题。

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

【讨论】:

  • var webdriverio = require('webdriverio'); var jasmine = 要求('茉莉花'); var options = {desiredCapabilities: { browserName: 'chrome' } }; describe("Testsuite", function() { it("Testcase", function() { it('code', function () { browser.url('xxx'); browser.setValue('#username', ' xxx@gmail.com'); browser.setValue('#password', 'xxx'); browser.submitForm('#login-submit'); browser.click('//*[@id="backupLocation"] /a'); }); }); });
  • 当我运行此错误时 - 描述未定义。使用 Nodejs 下载大文件的最佳框架是什么。
  • 嘿@Priyanka,目前@work 我的盘子里有很多东西,但我一有空闲时间就会回复你。我认为你也可以不加摩卡/茉莉花/黄瓜来做,但它更老套。您还需要为 WDIO 安装 Mocha 包以消除该错误:来自项目根目录的npm install --save-dev wdio-mocha-framework
  • 当我在“wdio.conf.js”文件中给出超时时,它无法下载文件它正在关闭会话,但是通过在 webdriver.io 代码中给出 .pause(2000000) 它能够下载文件7GB。如果“wdio.conf.js”文件没有下载就退出会话,超时有什么用?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    当我在“wdio.conf.js”文件中给出超时时,它不能 下载文件它正在关闭会话,但通过提供 .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 })
    

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

    这有助于通过等待文件条件: https://blog.kevinlamping.com/downloading-files-using-webdriverio/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 2017-03-14
      • 2017-12-27
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多