首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在webdriverio中使用接受回调的第三方方法

如何在webdriverio中使用接受回调的第三方方法
EN

Stack Overflow用户
提问于 2018-08-11 01:43:29
回答 2查看 2.5K关注 0票数 0

我需要一些帮助。我正在使用第三方方法,它在其中接受回调...所以现在如果我想在WDIO中使用它,我需要将该方法包装在promise中…因此,我做了以下工作:

代码语言:javascript
复制
post(env, userAccount, canonical, isItQuery){
    let options = { ..... };
    return new Promise(function(resolve, reject){
        request.post(options,function(error, response){
            logger.info('In to the callback of request post');
            if(!error){
                resolve(response);
            }
            else{
                reject(error);
            }                
        });
    });
}

我尝试在stepDefinition中调用这个方法,如下所示:

代码语言:javascript
复制
      rm.post(env,userAccountID,payloadName,true).then(function(resp) {
        console.log('Response: ' + resp);
    })
    .catch(function(error){
        console.log("ERROR: " + error);
    })

在执行过程中,脚本不等待来自request.post方法的响应...在没有响应的情况下完成了执行...请告诉我怎样才能让它工作。

我使用request-promise npm-module尝试了同样的方法,它返回promise,而不是接受回调并得到相同的问题:

以下是示例代码:

代码语言:javascript
复制
import {defineSupportCode} from 'cucumber';
import request from 'request-promise';
import config from 'config';
import fs from 'fs';
require('request-promise').debug = true;

defineSupportCode(function({Given, When, Then}){
    Given(/^Run the "([^"]*)" with user_session of "([^"]*)"$/, (canonical, user_session) => {

        .......
        .......
        const payload = fs.readFileSync(path,{encoding:'utf8'});

        let options = {
            ...........
            ...........
        };

        request(options)
        .then(function ($) {
              console.log($);
         })
        .catch(function (err) {
       console.log('error');
         });
    });
});

我在sync:true中使用wdioRunner。我使用的是cucumber框架。

谢谢你!!

EN

回答 2

Stack Overflow用户

发布于 2018-08-15 03:59:01

好的..。在一些帮助下,我能够解决这个问题。因此,wdioRunner(使用sync:true)同步运行每个命令。所以现在,如果你想使用一个接受回调的异步方法,那么你需要使用browser.call

http://webdriver.io/api/utility/call.html#Usage

所以post方法应该是这样的:

代码语言:javascript
复制
post(env, userAccount, canonical, isItQuery){
let options = { ..... };
browser.call(() => {
    return new Promise(function(resolve, reject){
        request.post(options,function(error, response, resp){
            console.log('Inside the callback!!!!!');
            jsonResponse = resp;
            if(!error){
                console.log('NO Error: ' + resp);                    
                resolve(resp);

            }
            else{
                console.log('Error: ' + error);
                reject(error);
            }
    });
});
}
票数 2
EN

Stack Overflow用户

发布于 2018-08-11 10:50:57

你错过了从承诺中返回的东西。

你需要一个响应,试着返回它。

您还可以返回一个包含状态代码和响应等的数组。

安装请求-promise npm安装--保存请求-promise

代码语言:javascript
复制
var rp = require('request-promise');
var cheerio = require('cheerio'); 
var options = {
        uri: 'http://www.google.com',
                  transform: function (body) {
                     return cheerio.load(body);
                   }
               }; 
 rp(options)
     .then(function ($) {
           console.log($);
      })
     .catch(function (err) {
    console.log('error');
      });

响应体如下所示

代码语言:javascript
复制
{ [Function: initialize]
  fn:
   initialize {
     constructor: [Circular],
     _originalRoot:
      { type: 'root',
        name: 'root',
        namespace: 'http://www.w3.org/1999/xhtml',
        attribs: {},
        'x-attribsNamespace': {},
        'x-attribsPrefix': {},
        children: [Array],
        parent: null,
        prev: null,
        next: null } },
  load: [Function],
  html: [Function],
  xml: [Function],
  text: [Function],
  parseHTML: [Function],
  root: [Function],
  contains: [Function],
  merge: [Function],
  _root:
   { type: 'root',
     name: 'root',
     namespace: 'http://www.w3.org/1999/xhtml',
     attribs: {},
     'x-attribsNamespace': {},
     'x-attribsPrefix': {},
     children: [ [Object], [Object] ],
     parent: null,
     prev: null,
     next: null },
  _options:
   { withDomLvl1: true,
     normalizeWhitespace: false,
     xml: false,
     decodeEntities: true } }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51791594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档