这里主要介绍如何使用 js 版本的 webselenium:
一:安装 Nodejs
对应各版本下载地址:https://npm.taobao.org/mirrors/node
这个是国内的淘宝源镜像,如果不FQ下载速度可观,如果是最新版本的 Node 安装在 windows 系统需要至少 windows8
安装好 Node 后一般还会安装相配套的 Node 包管理工具 npm,也可以使用 yarn 来作为替代,npm 优化前 yarn 更多被开发使用
命令行:npm i -g yarn
二:安装 selenium-webdriver
选择一个空文件夹,输入命令 yarn init -y,我们就可以初始化一个基本的 Node 项目,下面的 package.json 就是项目的包配置文件
紧接着输入 yarn i selenium-webdriver,就会将相应库从云端拉至本地
新建一个 app.js 文件来写对应的测试脚本:
const { webdriver,By,until } = require('selenium-webdriver'); const driver = new webdriver.Builder() .forBrowser('chrome') .build(); driver.get('http://www.baidu.com/');
上述代码就可以打开一个简单的百度搜索页面,如果要灵活使用 webselenium 来完成更多复杂的测试则需要熟练掌握其 api
三:常用方法
从 npm 下载的 selenium-webdriver 使用 Typescript 和 oop 的风格构建库,因此可以很方便地找到代码引用和各种 api 的使用方式。另一个很重要的特点是大量使用 Promise ,几乎所有 api 返回值都是 Promise,因此可以很好地进行异步同步化处理。
下面是根据个人经验列举出常用的 api:
1. driver.findElement(By.css(string CSSSelector));
根据 css 选择器定位 html 元素
2.driver.wait( until.elementLocated(WebElementPromise promise), 10000 );
页面将等待至某个 html 元素出现,第二个参数设置超时毫秒数
3.await driver.actions().click(WebElementPromise promise).sendKeys("input").perform();
链式操作,最后的 perform 让人联想到函数式编程里的洋葱模型
4.await driver.executeAsyncScript(`const callback = arguments[arguments.length - 1]; callback("returnValue");`);
可以猜到类似字符串拼接成函数执行体的方式,就不难理解如何使用了,使用 callback 异步获取返回值,同步自然可以在字符串里直接使用 return returnValue 的方式
5.driver.getAllWindowHandles() 和 driver.switchTo().window(newWindowHandle);
类似浏览器新开一个 tab 页然后切到新的 tab 页