Protractor-cucumber-framework:回调问题,同步回调在步骤定义文件中不起作用

问题描述

我正在尝试从头开始实现量角器黄瓜框架。我的文件也正常工作。现在,作为下一步,我试图为同一脚本实现POM,但是首先,我需要使我的脚本在不进行异步回调的情况下工作。我不希望通过异步回调实现POM。有人可以指出我正确的方向,还是告诉我当前代码在哪里出问题了。

我正在测试的应用程序仅是有角度的,因此错误消息没有帮助。

与回调正常工作的第一步文件,如果我删除了回调,它将停止工作,错误显示如下

功能文件 示例数据是伪数据


    Scenario Outline: Scenario Outline name: Login and Verify user
        Given User is redirected to <site>
        When User inputs <username> and <password>
        Then User should be successfully logged in with their <name>

        Examples:
            | site              | username | password       | name     |
            | http://dummydata/ | xyz      | password12     | dummy    |

StepDeFinition文件

var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
const { browser,element } = require("protractor");
chai.use(chaiAsPromised);
var expect = chai.expect;
var { setDefaultTimeout } = require('cucumber');

setDefaultTimeout(60 * 1000);

/*these are page element locators- needs to be shifted to PO file 
and reference needs to created here*/

var username = element(by.xpath('/html/body/app-root/app-auth-main/div/div[2]/app-login/div/div/form/div[1]/input'));
var password = element(by.xpath('/html/body/app-root/app-auth-main/div/div[2]/app-login/div/div/form/div[2]/input'));
var loginButton = element(by.xpath('/html/body/app-root/app-auth-main/div/div[2]/app-login/div/div/form/div[3]/button[2]'));
var userVerify = element(by.xpath('/html/body/app-root/app-main/app-header/div/div[2]/div/table/tbody/tr/td[2]/div[1]'));
var logoutButton = element(by.xpath('/html/body/app-root/app-main/app-header/div/div[2]/div/table/tbody/tr/td[3]/ul/li/div/a[3]'));
var loginHeader = element(by.xpath('/html/body/app-root/app-auth-main/div/div[2]/app-login/div/div/form/p'));
var logoutdropdown = element(by.xpath('/html/body/app-root/app-main/app-header/div/div[2]/div/table/tbody/tr/td[3]/ul/li'));
var teamName = element(by.xpath('/html/body/app-root/app-auth-main/div/div[1]/div/div/div/table/tbody/tr/td[2]/div/div[2]'))
var loginError = element(by.xpath('/html/body/div/div/div[1]/h2'))

function login(a,b) {
  username.sendKeys(a);
  password.sendKeys(b);
  loginButton.click();

}

Given(/^User is redirected to (.*)$/,{ timeout: 60 * 1000 },function (site,callback) {
  browser.get(site);
  expect(loginHeader.isPresent()).and.notify(callback);
  
});

When(/^User inputs (.*) and (.*)$/,function (username,password,callback) {
  login(username,password);
  browser.sleep(2000);
  browser.getcurrenturl().then(function (Url) { console.log(Url + " page reached,login successful.") });
  expect(userVerify.isPresent()).and.notify(callback);
});

Then(/^User should be successfully logged in with their (.*)$/,function (name,callback) {

  expect(userVerify.getText()).to.eventually.equal(name);
  logoutdropdown.click();
  logoutButton.click();
  browser.sleep(2000);
  browser.getcurrenturl().then(function (Url) {
    console.log("login page " + Url + " reached. Test finished")
  });
  expect(teamName.getText()).to.eventually.equal("Asterisk").and.notify(callback);

});

Conf.js

exports.config = {
  directConnect: true,getPageTimeout: 50000,framework: 'custom',frameworkPath: require.resolve('protractor-cucumber-framework'),capabilities:{'browserName': 'chrome'},specs: ['tests/feature/*.feature'],cucumberOpts:{
    require:'tests/stepdeFinition/stepdeFinition.js',tags: false,profile: false,'no-source':true},onPrepare: function(){
    const {Given,Then,When} = require('cucumber');
    global.Given = Given;
    global.When = When;
    global.Then = Then;
      browser.manage().window().maximize();
    }

}

步骤文件失败

var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
const { browser,element } = require("protractor");
chai.use(chaiAsPromised);
var expect = chai.expect;
var { setDefaultTimeout } = require('cucumber');
setDefaultTimeout(60 * 1000);

/*these are page element locators- needs to be shifted to another file 
and reference needs to created here*/

var username = element(by.xpath('/html/body/app-root/app-auth-main/div/div[2]/app-login/div/div/form/div[1]/input'));
var password = element(by.xpath('/html/body/app-root/app-auth-main/div/div[2]/app-login/div/div/form/div[2]/input'));
var loginButton = element(by.xpath('/html/body/app-root/app-auth-main/div/div[2]/app-login/div/div/form/div[3]/button[2]'));
var userVerify = element(by.xpath('/html/body/app-root/app-main/app-header/div/div[2]/div/table/tbody/tr/td[2]/div[1]'));
var logoutButton = element(by.xpath('/html/body/app-root/app-main/app-header/div/div[2]/div/table/tbody/tr/td[3]/ul/li/div/a[3]'));
var loginHeader = element(by.xpath('/html/body/app-root/app-auth-main/div/div[2]/app-login/div/div/form/p'));
var logoutdropdown = element(by.xpath('/html/body/app-root/app-main/app-header/div/div[2]/div/table/tbody/tr/td[3]/ul/li'));
var teamName = element(by.xpath('/html/body/app-root/app-auth-main/div/div[1]/div/div/div/table/tbody/tr/td[2]/div/div[2]'))
var loginError = element(by.xpath('/html/body/div/div/div[1]/h2'))

function login(a,b) {
  username.sendKeys(a);
  password.sendKeys(b);
  loginButton.click();

}


Given(/^User is redirected to (.*)$/,function (site) {
  browser.get(site);
  expect(loginHeader.isPresent());
});

When(/^User inputs (.*) and (.*)$/,callback) {

  expect(userVerify.getText()).to.eventually.equal(name);
  logoutdropdown.click();
  logoutButton.click();
  browser.sleep(2000);
  browser.getcurrenturl().then(function (Url) {
    console.log("login page " + Url + " reached. Test finished")
  });
  expect(teamName.getText()).to.eventually.equal("Asterisk").and.notify(callback);

}); 

错误消息

[11:13:53] I/launcher - Running 1 instances of WebDriver
[11:13:53] I/direct - Using ChromeDriver directly...

DevTools listening on ws://127.0.0.1:52334/devtools/browser/7dccfc7d-60c3-48b7-a6fa-3897bc329b1b
.[11:14:03] E/launcher - Error while waiting for Protractor to sync with the page: "both angularJS testability and angular testability are undefined.  This Could be
either because this is a non-angular page or because your test involves client-side navigation,which can interfere with Protractor's bootstrapping.  See http://git.io/v4gXM for details"
[11:14:03] E/launcher - Error: Error while waiting for Protractor to sync with the page: "both angularJS testability and angular testability are undefined.  This Could be either because this is a non-angular page or because your test involves client-side navigation,which can interfere with Protractor's bootstrapping.  See http://git.io/v4gXM for details"
    at C:\Users\dummyUser\AppData\Roaming\npm\node_modules\protractor\built\browser.js:461:23
    at ManagedPromise.invokeCallback_ (C:\Users\dummyUser\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:1376:14)
    at TaskQueue.execute_ (C:\Users\dummyUser\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:3084:14)
    at TaskQueue.executeNext_ (C:\Users\dummyUser\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:3067:27)
    at C:\Users\dummyUser\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2927:27
    at C:\Users\dummyUser\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:668:7
    at processticksAndRejections (internal/process/task_queues.js:97:5)Error
    at ElementArrayFinder.applyAction_ (C:\Users\dummyUser\AppData\Roaming\npm\node_modules\protractor\built\element.js:459:27)
    at ElementArrayFinder.<computed> [as sendKeys] (C:\Users\dummyUser\AppData\Roaming\npm\node_modules\protractor\built\element.js:91:29)
    at ElementFinder.<computed> [as sendKeys] (C:\Users\dummyUser\AppData\Roaming\npm\node_modules\protractor\built\element.js:831:22)
    at login (C:\Users\dummyUser\Desktop\asteriskTestAutomation\tests\stepdeFinition\stepdeFinition.js:23:12)
    at World.<anonymous> (C:\Users\dummyUser\Desktop\asteriskTestAutomation\tests\stepdeFinition\stepdeFinition.js:38:3)
[11:14:03] E/launcher - Process exited with error code 199
PS C:\Users\dummyUser\Desktop\asteriskTestAutomation> [30280:26308:0908/111407.969:ERROR:device_event_log_impl.cc(208)] [11:14:07.970] Bluetooth: bluetooth_adapter_winrt.cc:1074 Getting Default Adapter Failed.

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...