自动化 End-End 测试 Nightwatch.js 之踩雷笔记:点击物件

点击特定物件是 E2E 中很常会做到的事,如果本身物件有设定好特定的 ID, Class 或 Attribute,只要使用 Nightwatch 中提供的 click() 就可以了

.click() 这个指令是透过模拟点击 DOM element,且具备 scroll into view 的功能,也就是能够自动滚动至该物件。此外也能判断 DOM 是否能被点击。
使用方法也很简单:

.click(selector, [callback])
.click(using, selector, [callback])

selector 为 DOM 的选择器,using 则可以是 Css 或 Xpath,最後也有 callback function 可以使用。

Safaridriver

在撰写前端时,为了使 SEO 更好,时常会有将 <button> 改为 <div> 的做法。而这在 E2E 并使用 Safari 时就不是这麽方便的选择。
这个问题源自於 Safaridriver 对於可点击物件的判断。不过这篇不会细探,只会提供方法XD

clickDiv()

既然模拟 DOM 点不到,那就用 Javascript 去点吧!

document.querySelector(selector).click();

很简单吧!
但只有 Css selecot 还是不够的,虽然物件可以透过预先加入 ID, Class 或 Attribute,但如果每个都加可能会变得很麻烦。因此可以利用 Xpath:

  • text() 是用来寻找并定位特定的文字位置
  • starts-with 匹配一个属性开始位置的关键字
  • contains 匹配一个属性值中包含的字串

举例来说,可以像是这样使用:

//input[text()='搜寻文字'] 

而点击 Xpath 的方法也很简单:

document
  .evaluate(
    selector,
    document,
    null,
    XPathResult.FIRST_ORDERED_NODE_TYPE,
    null,
  )
  .singleNodeValue.click();

有了 Css/Xpath 的点击方法後,就可以修改我们的 clickDiv() 了:

exports.command = function(using, selector, callback) {
  callback = callback || function() {};
  using = using || 'css';
  if (using === 'css') {
    this.execute(
      function(selector) {
        document.querySelector(selector).click();
      },
      [selector],
      function(result) {
        callback.call(this, result);
      },
    );
  } else {
    this.execute(
      function(selector) {
        document
          .evaluate(
            selector,
            document,
            null,
            XPathResult.FIRST_ORDERED_NODE_TYPE,
            null,
          )
          .singleNodeValue.click();
      },
      [selector],
      function(result) {
        callback.call(this, result);
      },
    );
  }

  return this;
};

然而,点击物件这件事还没结束,明天还有另外一篇,继续说说我在处理点击遇到的其他雷点QQ


<<:  Day 06 - jS 微基础之ES6心得及准备进入React

>>:  IT铁人DAY 6-UML基本认识

EP 6: Use self-define Code Snippet to improve Coding Experience for design Command in ViewModel

Hello, 各位 iT邦帮忙 的粉丝们大家好~~~ 本篇是 Re: 从零开始用 Xamarin 技...

CSS微动画 - 图片不裁切,纯css实现分格淡出

Q: 还有什麽特别的可以写吗? A: 可能... 再回去Loading吧(๑¯∀¯๑) 本篇要来做...

#20 数据中的机率性(1)

tags: tags: 2021IT 了解随机性 从整体上观察矩阵(集合)中的物件分布与矩阵整体的关...

自己的hackmd自己架 - Codimd

更多会员限定文章可以到patreon观看 Codimd是hackmd的开源版,虽然主要功能仍含hac...

【DAY 9】SharePoint 的应用五花八门,什麽最适合你?(中)

昨天我们提到,明为什麽用 SharePoint 制作的公司入口网站可以组织提升生产力? 这个时候就可...