我为我的应用程序使用量角器编写了一个结束测试。我确定测试应该是正确的。但我不时会看到错误:ElementNotVisibleError: element not visible
,Expected false to be true
,No element found using locator
。
这是测试代码:
describe "try test message center and it", ->
beforeEach ->
ptor = protractor.getInstance()
ptor.ignoreSynchronization = true
it "should login", ->
browser.driver.get homeURL
browser.manage().window().maximize()
element(`by`.xpath('//select/option[2]')).click()
element(`by`.css('.buttons input')).click()
it "should url is as expected", ->
ptor = protractor.getInstance()
expectedUrl = homeURL + '#/messages'
expect(ptor.getCurrentUrl()).toBe(expectedUrl)
it "should create and send new message", ->
ptor = protractor.getInstance()
ptor.sleep 1000
element(`by`.css('button.btn-primary')).click()
element(`by`.model('uiData.createRecipient')).sendKeys 'James'
ptor.sleep 1000
element.all(`by`.repeater('match in matches')).get(1).click()
element(`by`.model('uiData.createSubject')).sendKeys 'subject 2'
element(`by`.model('uiData.createText')).sendKeys 'body of message'
ptor.sleep 1000
element(`by`.css('div.form-group a.btn-primary')).click()
ptor.sleep 1000
expect(element(`by`.css('.popupBox')).isPresent()).toBe(true)
it "should check new message", ->
ptor = protractor.getInstance()
ptor.get('#/messages?folder=1')
ptor.driver.navigate().refresh()
ptor.sleep 5000
element(`by`.model('uiData.to')).sendKeys 'k'
ptor.sleep 3000
element.all(`by`.cssContainingText('span.grid-col-to', 'James')).last().click()
ptor.sleep 1000
expect(element(`by`.xpath('//*[text()[contains(.,"body of message")]]')).isPresent()).toBe(true)
element(`by`.xpath('//*[text()[contains(.,"Own it!")]]')).click()
ptor.sleep 1000
expect(element(`by`.cssContainingText('span', 'Owned by')).isPresent()).toBe(true)
element(`by`.xpath('//*[text()[contains(.,"Disown it")]]')).click()
ptor.sleep 1000
expect(element(`by`.cssContainingText('span', 'Disowned by')).isPresent()).toBe(true)
量角器v1.0.0, Grunt量角器转轮v1.0.1 节点v0.10.28, NPM v1.4.9, Chrome驱动程序v2.10, Selenium Server v2.42.2。 Jenkins在Windows Server 2008 R2下运行的测试
它可能是什么?感谢。
答案 0 :(得分:3)
可能会有所帮助的两个提示。
这两个提示甚至适用于phantomjs。 将以下内容添加到protractor.conf.js
onPrepare: function () {
// The require statement must be down here, since jasmine-reporters
// needs jasmine to be in the global and protractor does not guarantee
// this until inside the onPrepare function.
var browserName,
platform,
window = browser.manage().window();
require('jasmine-reporters');
require('protractor-html-screenshot-reporter');
jasmine.getEnv().addReporter(new jasmine.ConsoleReporter());
// create a html reporter with screenshots
jasmine.getEnv().addReporter(new HtmlReporter({
baseDirectory: 'reports/screenshots' ,
takeScreenShotsOnlyForFailedSpecs: true
}));
// set the window size
browser.getCapabilities().then(function (capabilities) {
browserName = capabilities.caps_.browserName;
platform = capabilities.caps_.platform;
}
).then(function getCurrentWindowSize() {
return window.getSize();
}
).then(function setWindowSize(dimensions) {
var windowWidth = 1980,
windowHeight = 1200;
return window.setSize(windowWidth, windowHeight);
}
).then(function getUpdatedWindowSize() {
return window.getSize();
}
).then(function showWindowSize(dimensions) {
console.log('Browser:', browserName, 'on', platform, 'at', dimensions.width + 'x' + dimensions.height);
console.log('Running e2e tests...');
}
);
},
答案 1 :(得分:1)
如果您移动窗口或调整窗口大小,它可以隐藏Protractor正在寻找的元素。或者,在页面上的所有元素可视完成加载之前,Protractor有时会移动到下一行代码。由于Protractor模拟人类用户,因此它拒绝与隐藏元素进行交互。
另外,你应该尽可能避免使用睡眠。