之前有提到过一些相关方面的技术:

目前在经过了不断地实践打磨,Macaca 的浏览器事件操作有了更加统一的封装,主要是通过 macaca-wd 的 domEvent 等 API 透出。

表单元素输入

表单元素,如 input,textarea 等字符输入元素可以通过 formInput 模拟逐字输入。

formInput: https://macacajs.github.io/macaca-wd/#formInput

普通元素输入内容

普通元素通过设置 contenteditable 属性也可以进行输入,通过 elementInput 可以模拟逐字输入。

elementInput: https://macacajs.github.io/macaca-wd/#elementInput

输入的例子

比如这个常见的场景案例,给一个登陆框输入账户密码:

it('input should be correct', () => {
  return driver
    .getUrl(`${BASE_URL}/antd-sample#login`)
    .elementByCss('[accessbilityId="username"]')
    .formInput('username')
    .elementByCss('[accessbilityId="login"]')
    .click()
    .elementByCssOrNull('#app > form > div:nth-child(1) .ant-form-explain')
    .then(res => assert.deepEqual(res, null));
});

示例源码参考:链接 ,可以拉一下代码跑跑看。

更加通用的 API

domEvent: 给目标元素派发键盘事件,通过 domEvent 模拟几乎任何浏览器的事件,完成测试触发等目标 https://macacajs.github.io/macaca-wd/#domEvent

目前支持:

事件支持列表见:https://github.com/macacajs/dom-event-simulate

文件上传场景

文件上传的 input[type="file"] 元素框的弹出与 alert confirm 一样,会 block 浏览器的 BOM 行为,将交互权限交给用户,处理比较麻烦。通过 domEvent 模拟 change 事件的响应可以简单解决文件上传的问题。

var element = document.querySelector('#input');

element.addEventListener('change', function(e) {
  console.log(e.target.files);
}, false);

domEvent(element, 'change', {
  data: {
    target: {
      files: [
        {
          file: 'file1.png',
        },
        {
          file: 'file2.jpg',
        }
      ],
    },
  }
});

相关链接


↙↙↙阅读原文可查看相关链接,并与作者交流