当我用量角器运行cucumber时,我收到错误信息,任何人都可以帮助我提出原因:
'use strict';
( function () {
var navigate = function () {
browser.get( 'http://store.demoqa.com/products-page/your-account/' );
};
var login = function ( username, password ) {
this.username.sendKeys( username );
this.password.sendKeys( password );
this.loginButton.click();
};
var LoginPage = function () {
this.username = dv.findElement( by.id( 'log' ) );
this.password = dv.findElement( by.id( 'pwd' ) );
this.loginButton = dv.findElement( by.id( 'login' ) );
};
LoginPage.prototype.navigate = navigate;
LoginPage.prototype.login = login;
module.exports = LoginPage;
} )();
'use strict';
var LoginPage = require( '../login/loginpage.js' );
var HomePage = require( '../../features/homepage/homepage.js' );
var chai = require( '../../chai' );
var chaiAsPromised = require( '../../chai-as-promised' );
chai.use( chaiAsPromised );
var expect = chai.expect;
module.exports = function () {
var loginPage;
var homePage;
this.Before( function ( callback ) {
loginPage = new LoginPage();
homePage = new HomePage();
isAngularSite(false);
loginPage.navigate();
callback();
} );
this.After( function ( callback ) {
//logout
callback();
} );
// First Scenario
//this.When('I am in login page')
this.Given(/^I login using valid creadentials$/, function ( callback ) {
loginPage.login( 'username', 'password' ); //valid creadential
callback();
} );
this.Then(/^I should be logged in$/, function ( callback ) {
expect(homePage.homeIndicator).toEqual('http://someUrl.com/#home');
callback();
} );
};
-----------------config.js---------------
'use strict';
var config = {
seleniumAddress : 'http://localhost:4444/wd/hub',
specs : [ 'features/login/login.feature' ],
baseUrl : 'http://store.demoqa.com/',
capabilities : {
browserName : 'firefox'
},
onPrepare : function () {
var width = 1024;
var height = 600;
global.dv = browser.driver;
dv.manage().window().setSize( width, height );
// This will tell the Protractor not to wait for angular
global.isAngularSite = function(flag) {
browser.ignoreSynchronization = !flag;
};
},
framework : 'cucumber',
cucumberOpts : {
// define your step definitions in this file
require : 'features/login/spec.js',
//format : 'pretty'
}
};
exports.config = config;
----------login.feature------------
Feature: Login
As a user, I should be able to have login creadentials so that I can login to the system
Scenario: Valid login creadentials
Given I login using valid creadentials
Then I should be logged in
原因是我忘记在loginpage.js的set函数中添加括号。替换
LoginPage.prototype.navigate = navigate;
LoginPage.prototype.login = login;
由:
LoginPage.prototype.navigate = navigate();
LoginPage.prototype.login = login();
问题内容: 我似乎无法使Protractor意识到Angular已加载并正在运行。当Chrome打开时,我的应用程序已完全加载到浏览器中,因此我知道Angular已加载并正常运行。 配置文件: 我只有一个要运行的测试,但由于量角器找不到Angular而失败了。 考试: 这是我得到的错误: UnknownError:JavaScript错误:未定义角度(会话信息:chrome = 30.0.1599
问题内容: 这正是我想要做的 我用表格打开一个页面,该表格包含有关用户的信息 我的getText()元素指示表中的用户数(例如“列表中的11个用户”) 我删除“列表中的用户”部分,并将字符串转换为整数,以便稍后在for循环中使用 我需要通过用户名(第9列)查找某些用户,并获取数字,该数字是该用户信息所在的行数(这就是我被卡住的地方) 我转到该行的第一列(该行将成为该特定用户的编辑按钮),然后单击它
conf.js test.js
问题内容: 当我使用量角器执行以下代码时,它可以工作。我将嵌套的json传递给for循环。由于for循环的异步工作,它将打印变量i的所有值并达到最后一个值,因此它始终访问最后一对用户名和密码。我该如何解决这个问题? 问题答案: 您需要牢记,不能将-loop与promises一起使用。一切都是异步的,所以 最终它会咬到你 ,这意味着它已经准备好了,但测试还没有。 根据您的示例,建议创建一个名为例如的
我维护了一个复杂的Angular(1.5.x)应用程序,该应用程序正在使用Protractor(2.5.x)进行E2E测试。我在使用这种方法时遇到了一个问题,主要表现在测试似乎不可靠。在一个拉请求中运行良好的测试在另一个请求中失败。这涉及简单的定位器,例如by.linkTest(…)。我调试了失败的测试,应用程序位于正确的页面上,链接存在并且可以访问。 还有人遇到过这些一致性问题吗?知道原因或解决
问题内容: 我编写了量角器自动化测试并遇到了问题。Wait命令实际上并不等待数组元素之一。请参阅以下示例:导航到网页后,我尝试等待第一个元素。 但是测试失败,并显示以下错误:。 错误与定位器类型无关,因为它同时出现在:“ by.repeater”和“ by.css”上。选择器还可以,添加“ sleep”命令后测试通过: 另外,timeout参数也无济于事,它会忽略它并立即失败。 那么问题是如何等待