Node selenium-webdriver
Selenium-webdriver基本使用
准备
① node.js 的安装和配置略
② Selenium-webdriver
npm install -save selenium-webdriver
③ 驱动
chromedriver 欢迎大家FQ下载:https://sites.google.com/a/chromium.org/chromedriver/downloads。然后找个环境路径存一下就可以调用了。
IEdriver github下载:https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver 。 同样环境路径保存。
注意:IE玩家把internet选项-安全- 四个选项的启动保护模式都关掉!
PhantomJS 直接解压,把bin目录放在环境路径中
Opera以及geckodriver试了一下,对最新版opera和firefox支持并不好。可以下载较低的版本使用。
一、基本使用
const {Builder, By, Key, until, Button} = require("selenium-webdriver");
let broswer = new Builder().forBrowser('ie').build() #这里使用了ie引擎
broswer.get('http://www.baidu.com')
broswer.quit() // 表示关闭浏览器
//drive.close()表示关闭当前窗口
二、选择器
broswer.findElement(By.name('btnG'));
broswer.findElement({id:"btnG"});
element.findElement(); //同样可以对元素使用findElement方法
findElements //查找多个元素
By.className(classname)
By.css(selector) #css-selector
By.id(id)
By.name(name)
By.linkText(text)
By.partialLink(text)
By.xpath()
By.js() //Locates an elements by evaluating a JavaScript expression. The result of this expression must be an element or list of elements.
三、属性获取
//获取代码:
browser.getPageSource().then(function(souce) {console.log(souce);
//获取网页标题:
browser.getTitle().then(b=>{console.log(b)});
//获取当前url:
browser.getCurrentUrl().then(b=>{console.log(b)}); //element为web元素对象,为findelement()的返回对象
element.getText().then(b=>{console.log("text",b)}) //返回里面没有被隐藏的文字(不带标签) element.getTagName().then(b=>{console.log("Tagname",b)})
//返回标签名 element.getId().then(b=>{console.log("ID",b)})
//返回这个element服务器分配的不透明id elements.getCssValue().then(=>{console.log("CSSvalue",b)})
//返回该element的CSS属性 //其他属性:
element.getAttribute("class").then(b=>{console.log(b)})
四、等待
//等待元素:
browser.wait(until.elementLocated(By.id('foo')), 10000); browser.wait(function() {
return driver.getTitle().then(function(title) { console.log(11111111);
return title === 'webdriver - Google Search';
});
}, 1000); browser.wait(until.titleIs('webdriver - Google Search'), 1000) //settimeouts
browser.manage().setTimeouts(args)
// args参数
{implicit: (number|null|undefined), pageLoad: (number|null|undefined), script: (number|null|undefined)}
implicit:等待元素加载的最大时间;pageLoad等待页面加载完成的最大时间
五、操作
①input操作
//清空
element.clear();
//输入
element.sendKeys("webdriver");
element.sendKeys(Key.ENTER);
element.submit(); //以submit命令提交执行
②截图
broswer.takeScreenshot().then() //返回页面png截图
element.takeScreenshoot().then() //返回元素png截图
③鼠标操作
//单击鼠标
element.click()
//连锁动作(action对象)
const actions = driver.actions();
actions
.keyDown(SHIFT)
.move({origin: el})
.press()
.release()
.keyUp(SHIFT)
.perform();
//actions对象以perform()作为动作链结尾,表示命令执行 //具体方法如下:
actions.clear() //清空所有动作,按键和状态
actions.click(element) //对element左键单击一次
actions.contextClick(element) //对element右键单击一次
actions.doubleClick(element) //对element双击一次
actions.dragAndDrop(ele_from,to) //单击鼠标拖动ele_from元素,如果to是坐标{x:number,y:number}移动距离;如果to是元素移动到to元素中心,并释放鼠标。 actions.keyDown(key) //按下键盘的key键
actions.keyUp(key) //释放key键 actions.move(options) //移动参数如下:
//options ({duration: (number|undefined), origin: (Origin|WebElement|undefined), x: (number|undefined), y: (number|undefined)}|undefined)
//origin是起始位置,默认为鼠标当前位置,可以设置元素为起始位置。x,y为偏移量。duration为持续时间默认(100ms) actions.press(button) //按下鼠标 button默认是鼠标左键,有LEFT,RIGHT,MIDDLE三个值,通过Button.LEFT....获得
actions.release(button) //释放鼠标,默认左键
actions.sendKeys() //同sendkeys
actions.pause(ms,devices) //暂停ms时间,如果devices没有指定,会创建一个针对所有的事件
举例:
let actions = driver.actions({async: true});
actions.keyDown(Key.SHIFT);
actions.pause(actions.mouse()) // Pause for shift down
.press(Button.LEFT)
.move({x: 10, y: 10})
.release(Button.LEFT);
actions
.pause(
actions.keyboard(), // Pause for press left
actions.keyboard(), // Pause for move
actions.keyboard()) // Pause for release left
.keyUp(Key.SHIFT);
await actions.perform();
actions.mouse(); actions.keyboard() //分别代表鼠标和键盘设备
e.g.
更多细节参考:http://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/input_exports_Actions.html
六、options对象
通过let options = broswer.manage() 获得
options.addCookie({name: 'foo', value: 'bar'})
options.deleteAllCookies() //删除所有cookies
options.deleteCookie(name) //按照name删除
options.getCookie(name) //拿到name字段的cookie值,为promise对象
options.getCookies() //返回所有cookies,为promise对象
七、nav对象
通过let nav = broswer.navigate()获得
nav有四个方法分别为:
nav.back();
nav.forward();
nav.refresh();
nav.to(url);
分别为后退,前进,刷新,跳转到url
八、其他
①browser.excuteScript(script) //在当前frame中执行js代码
②brower.switchTo() //targetlocator
targetlocator对象参见:http://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/webdriver_exports_TargetLocator.html
其中targetlocator.frame(id)可以用来切换frame。通过parentFrame()切回
更多API详见:http://seleniumhq.github.io/selenium/docs/api/javascript/index.html
p.s. 根据浏览器版本和引擎不同,部分方法存在问题。
注意:一些执行操作的promise对象,需要合理利用async和await方法
Node selenium-webdriver的更多相关文章
- Selenium WebDriver 之 PageObjects 模式 by Example
目录 1. 项目配置 2. 一个WebDriver简单例子 3. 使用Page Objects模式 4. 总结 5. Troubleshooting 6. 参考文档 本篇文章通过例子来阐述一下Sele ...
- Selenium WebDriver + Grid2 + RSpec之旅(四) ----通过RSpec编写测试用例
Selenium WebDriver + Grid2 + RSpec之旅(四) ----通过RSpec编写测试用例 自动化测试和手工测试一样,是要有测试用例,有检查点和测试结果的,接下来我们通过RSp ...
- Selenium WebDriver + Grid2 + RSpec之旅(六) ----多浏览器的并行执行
Selenium WebDriver + Grid2 + RSpec之旅(六) ----多浏览器的并行执行 由于浏览器的发展,浏览器种类繁多.为了保证系统能在各种浏览器上叱咤风云,减少测试人员的测试工 ...
- Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子
Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子 第一个例子都是比较简单的博客园登录界面,就像学习编程语言时候都是从Hello,World!开始. 1 ...
- Selenium WebDriver + Grid2 + RSpec之旅(二)----Grid2的配置
Selenium WebDriver + Grid2 + RSpec之旅(二) ----Grid2的配置 为什么要使用Selenium-Grid 分布式运行大规模的TestCase 能够通过一个中央节 ...
- Selenium & Webdriver 远程测试和多线程并发测试
Selenium & Webdriver 远程测试和多线程并发测试 Selenium Webdriver自动化测试,初学者可以使用selenium ide录制脚本,然后生成java程序导入ec ...
- Selenium WebDriver Code
Selenium WebDriver 用于模拟浏览器的功能,可以做网站测试用,也可以用来做crawler.我是用eclipse开发的,导入selenium-server-standalone-***. ...
- 使用httpclient 调用selenium webdriver
结合上次研究的selenium webdriver potocol ,自己写http request调用remote driver代替selenium API selenium web driver ...
- selenium webdriver 右键另存为下载文件(结合robot and autoIt)
首先感谢Lakshay Sharma 大神的指导 最近一直在研究selenium webdriver右键菜单,发现selenium webdriver 无法操作浏览器右键菜单,如图 如果我想右键另存为 ...
- Selenium Webdriver java 积累一
Selenium Webdriver 学习: http://jarvi.iteye.com/category/203994 https://github.com/easonhan007/webdriv ...
随机推荐
- Game Engine Architecture 4
[Game Engine Architecture 4] 1.a model of multiple semi-independent flows of control simply matches ...
- 利用redis实现分布式锁知识点总结及相关改进
利用redis实现分布式锁知识点总结及相关改进 先上原文,本文只为总结及对相关内容的质疑并提出若干意见,原文内容更详细https://www.cnblogs.com/linjiqin/p/800383 ...
- Java框架spring 学习笔记(十一):aop相关概念
为什么要引入aop? 比如如下情景: 在父类的方法名称发送了变化,在子类调用的方法也需要变化,当工程规模越来越大的时候,维护起来相当不方便,于是就引入了横向切面aop. aop的相关概念: 连接点:类 ...
- select2的设置选中
select2插件设置选中值并显示的问题 在select2中,要想设置指定值为选中状态并显示: $("#select2_Id").val("XXXXX").se ...
- UILabel设置富文本后不显示省略号
先描述一下问题,项目中用到了UILabel去显示一段富文本文字,超过label显示区域部分,省略号处理. 但是当设置好 attributedText 给label之后,显示出的效果是文字被切割了,并没 ...
- 4-20arget 属性和hover
1.target 属性 定义和用法 target 属性规定在何处打开 action URL. 值 描述 _blank 在新窗口中打开. _self 默认.在相同的框架中打开. _parent 在父框架 ...
- 20175234 2018-2019-2 《Java程序设计》第八周学习总结
目录 20175234 2018-2019-2 <Java程序设计>第八周学习总结 教材学习内容总结 15.1泛型 15.2链表 15.3堆栈 15.4散列映射 15.5树集 15.6树映 ...
- handsontable 常用 配置项 笔记
import React, { Component } from 'react'; import HotTable from 'react-handsontable'; import Handsont ...
- Rendering Problems Couldn't resolve resource @dimen/y20
(转)文章转自 songzi1228 的 https://blog.csdn.net/songzi1228/article/details/80255058 本人亲自试用,妥妥的解决了我的问题. R ...
- try_files
try_files $uri $uri/ /index.php$is_args$args 假设你防问 https://demo.com/demo 1.$uri:查找/demo文件 2.$ui/:查找/ ...