我有一个问题,哪个描述与I am not able to identify elements using protractor in angular 2 application完全匹配,但对我来说,问题不是通过在id值之前添加#来解决的问题
以下是代码:
When('I select my input box', (callback) => {
let inputbox = element(by.css('#roomWidthInput'));
console.log('inputBox promise set');
var scrpt = "return document.getElementById('roomWidthInput');";
browser.executeScript(scrpt).then(function (text) {
console.log('info', 'Script is: ' + scrpt);
});
inputbox.isPresent().then(function(isElementVisible) {
console.log('hello!');
expect(isElementVisible).to.be.true;
callback();
});
});
控制台记录:
然后它抛出错误:函数在5000毫秒后超时。
我也尝试使用by.id
定位器,结果完全相同。
非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
您的问题与protractor can't find element
无关,由于您的步骤定义功能执行持续时间超过了默认超时时间:5秒。
您应该更改默认超时,如下所示:
黄瓜3及以上
// supports/timeout.js
var { setDefaultTimeout } = require("cucumber");
setDefaultTimeout(60 * 1000);
上面的黄瓜2,但低于黄瓜3
// supports/timeout.js
var {defineSupportCode} = require('cucumber');
defineSupportCode(function({setDefaultTimeout}) {
setDefaultTimeout(60 * 1000);
});
黄瓜1及以下
// supports/timeout.js
module.exports = function() {
this.setDefaultTimeout(60 * 1000);
};
在量角器conf.js
中,将timeout.js添加到cucumberOpts.require中:
// set allScriptsTimeout to fix asynchronous Angular tasks to finish after 11 seconds
allScriptsTimeout: 600 * 1000,
cucumberOpts: {
require: [
"supports/timeout.js",
]
},
onPrepare: function() {
// add this when page opened by browser.get() is not angular page
browser.ignoreSynchronization = true;
}