可以'使用inter.js进行测试时不要滚动

Can't scroll when testing using intern.js

本文关键字:测试 滚动 js 使用 inter 可以      更新时间:2023-09-26

我使用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);
});

您的测试可能会失败,因为您使用的WebDriver服务器是如何确定元素可见性的。该页面上的标题菜单最初不可见,因为它的上边距为负,从而将其移动到视口之外。但是,根据WebDriver规范,由于负边距而在视口之外的元素不一定被视为不可见。Chrome和Firefox的WebDriver服务器至少表示它是可见的。这是一个WebDriver问题,而不是Internet问题;Intern基本上只是问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')不是必需的。没有理由把你的指挥链一分为二;超时适用于整个链,无论是拆分的还是完整的。在moveMouseTo之后不需要endend用于从命令链的上下文中弹出元素,而moveMouseTo不向上下文添加任何内容。