问题描述
我正在尝试从头开始实现量角器黄瓜框架。我的文件也正常工作。现在,作为下一步,我试图为同一脚本实现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 |
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 (将#修改为@)