我正在使用 NightWatchJS 编写一些自动化程序。我有一个简单的测试场景,我在其中执行以下操作
- 打开网址
- 登录
- 验证元素
- 验证 iframe 元素
我有一个带有提交按钮的简单登录页面。登录后的内页也有iframe。一旦登录操作成功,iframe 中的文本字段就会通过 JavaScript 进行聚焦。
我的 NightWatch 测试代码
module.exports = {
before: function(browser) {
console.log("Setting up...");
browser
.maximizeWindow()
},
after : function(browser) {
browser
.end()
console.log("Closing down...");
},
'Check Form Elements' : function (browser) {
browser
.url("siteurl")
.waitForElementVisible("body", 1000)
.waitForElementPresent('#email', 10000)
.setValue('#email','me@a5his.com')
.waitForElementPresent('#password', 10000)
.setValue('#password', 'encrypted')
.submitForm('#login_form', function(result){
console.log(result)
})
.pause(5000)
.waitForElementVisible('body', 10000)
.waitForElementVisible('li.active', 5000)
.assert.containsText('li.active', "Home")
.assert.elementPresent('#iframeone')
.frame('iframeone')
.waitForElementVisible('.wi-wrap', 5000)
. assert.containsText('header h1', 'Messages')
}
};
这个测试通过,直到表单提交,之后它失败了
Timed out while waiting for element <body> to be present for 10000 milliseconds. - expected "visible" but got: not found
我使用的是 Chrome 50、ChromeDriver 2.21.371459、OS X - El Capitan。 我在下面附上了我的 Selenium 详细信息。
提前致谢。
最佳答案
登录成功后页面是否重定向?
你能试试这个吗:
browser
.url("siteurl")
.waitForElementVisible('#email', 10000,false)
.setValue('#email','me@a5his.com')
.setValue('#password', 'encrypted')
.click('#login_form')
.waitForElementVisible('li.active', 5000,false)
.verify.containsText('li.active', "Home")
.verify.elementPresent('#iframeone')
.frame('#iframeone')
.waitForElementVisible('.wi-wrap', 5000,false)
.verify.containsText('header h1', 'Messages')
请记住,如果框架 ID 丢失或为空,服务器应切换到页面的默认内容。所以更好的选择器应该像下面这样,以确保它在那里并且是唯一的。
'input[name=username]',
'button[name=login]',
'iframe[class=iframeone]'
编辑1:对于元素“body”,您应该检查“存在与否”而不是“可见与否”
尝试 waitForElementPresent('body',5000,false)
而不是
waitForElementVisible('body',5000,false)
关于javascript - 登录操作后无法找到元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37339224/