我使用moveMouseTo
但它似乎无法运作。这是我的代码。有谁能看出它有什么问题吗?断言应该工作而不是返回错误,因为如果您尝试向下滚动页面www.keylocation.sg
,它将显示导航栏。
先谢谢。
define([
'intern!object',
'intern/chai!assert',
'./util',
'intern/dojo/node!fs'
], function(registerSuite, assert, util, fs) {
var suite = {
name: 'home-navbar',
afterEach: util.checkJSErrors,
// testing the visibility of navigation bar in the home page
'Home page navigation bar: navigation bar visibility': function() {
var remote = this.remote
.setWindowSize(1024, 768)
.get('about:blank')
.get('https://www.keylocation.sg');
this.timeout = 300000;
return remote
// check: Home page loads, navbar is not visible
.findById('header-menu').isDisplayed().then(assert.isFalse).end()
// check: Scroll down to next page, navbar becomes visible
.moveMouseTo(0,1000).end()
.findById('header-menu').isDisplayed().then(assert.isTrue).end();
}
};
registerSuite(suite);
});
答案 0 :(得分:3)
由于您使用的WebDriver服务器如何确定元素可见性,您的测试可能会失败。该页面上的标题菜单最初不可见,因为它具有负的上边距,将其移动到视口之外。但是,根据the WebDriver spec,由于负边距而在视口外部的元素不一定被认为是不可见的。 Chrome和Firefox的WebDriver服务器至少可以说是可见的。这是WebDriver问题,而不是实习问题;实习生基本上只是询问WebDriver服务器"这个元素是否可见"并告诉你答案。
由于isDisplayed
在这种情况下似乎不起作用,您可以检查该元素是否具有disabled
类,这是导致其具有负边距的原因。
不幸的是,尝试简单地将鼠标移动到元素上下文之外1000像素并不会滚动页面。当你没有给moveMouseTo
一个元素时,它会在当前的上下文元素中移动(最后找到的东西)。当没有上下文时,它会在最外层元素内移动,在这种情况下,它只有632px高。您需要将上下文设置为足够高以包含移动偏移的元素,或者您可以在页面底部找到一个元素,如页脚,并将鼠标移动到:
.findByCssSelector('.wrapper')
.moveMouseTo(0, 1500) // 1000 pixels is too small to show the scrollbar
.end()
或
.findByTagName('footer')
.then(function (footer) {
return this.parent.moveMouseTo(footer);
})
.end()
您的测试还有一些您可能想要纠正的其他问题。最初的get('about:blank')
并非必要。没有理由将你的命令链的两半分开;超时适用于整个链,无论它是分裂还是整体。在end
之后,您不需要moveMouseTo
; end
用于从命令链的上下文中弹出元素,moveMouseTo
不会向上下文添加任何内容。