基于nodejs的selenium的自动化测试这环境安装
Selenium 通过使用 WebDriver 支持市场上所有主流浏览器的自动化。每个浏览器都有一个特定的WebDriver,称为驱动程序,用于控制web浏览器的行为。
如下为各浏览器对应的驱动:
Browser Component
Chrome chromedriver(.exe)
Internet Explorer IEDriverServer.exe
Firefox 47+ geckodriver(.exe)
PhantomJS phantomjs(.exe)
Opera operadriver(.exe)
Safari SafariDriver.safariextz
1.下载相应的驱动到本地,解压找到以exe结尾的文件,放入想放的文件夹中,然后把路径配置在path中。
2.安装node环境,直接去官网下载安装:https://nodejs.org/en/
3.新建一个文件夹,然后在当前文件夹下执行:npm install selenium-webdriver,会多出一个node_modules目录,然后新建一个demo.js文件,在内部执行如下代码:
var webdriver = require('selenium-webdriver'),
By = webdriver.By,
until = webdriver.until;
var driver = new webdriver.Builder().forBrowser('chrome').build();
driver.get('https://www.baidu.com');
driver.findElement(By.id('kw')).sendKeys('webdriver');
driver.findElement(By.id('su')).click();
driver.wait(until.titleIs('webdriver_百度搜索'), 1000);
driver.quit();
4.运行 node index.js
const {Builder, By, until} = require('selenium-webdriver'); const assert = require('assert'); (async () => { let driver = await new Builder().forBrowser('chrome').build(); // 设置等待时长 // await driver.manage().setTimeouts( { implicit: 100000 } ); try{ // 最大化窗口 await driver.manage().window().maximize(); await driver.get('网站地址'); await driver.sleep(500) // 判断是否跳转到登录页 let curUrl = await driver.getCurrentUrl() assert.strictEqual(curUrl, '网站登录地址') // 设置账号密码 await driver.findElement(By.name('loginName')).sendKeys('admin') await driver.findElement(By.name('password')).sendKeys('888888') // 点击登录按钮 // await driver.findElement(By.css('p')).click() await driver.wait(until.elementLocated({css: 'p'}), 1000).click() await driver.sleep(1000) // 进入首页 判断首页是否正常显示 let ele = await driver.findElement(By.xpath('//*[@id="app"]/div[1]/div[1]/div/div[2]/div[3]/div/span')) assert.strictEqual(await ele.getText(), 'rescure 欢迎你') await driver.sleep(2000) // 点击弹出框的忽略按钮 await driver.findElement(By.xpath('/html/body/div[3]/div/div[3]/button[1]')).click() // 点击接警管理 菜单 await driver.findElement(By.xpath('//*[@id="app"]/div[1]/div[2]/div/div[1]/div/ul/div/div/li[1]')).click() await driver.sleep(1000) // 点击未归档菜单 await driver.findElement(By.xpath('//*[@id="app"]/div[1]/div[2]/div/div[1]/div/ul/div/div/li[1]/ul/a[1]')).click() // 所属区域下拉选择 --start let select_xpath = '//*[@id="app"]/div[1]/div[2]/section/div/div[2]/div[1]/div[1]/form/div/div[1]/div[1]/div/div[4]/div/div/div/div/input' await driver.wait(until.elementLocated({xpath: select_xpath}), 3000).click() let selectItem_xpath = '/html/body/div[4]/div[1]/div[1]/ul/li[3]' await driver.wait(until.elementLocated({xpath: selectItem_xpath}), 3000).click() let search_xpath = '//*[@id="app"]/div[1]/div[2]/section/div/div[2]/div[1]/div[1]/form/div/div[1]/div[2]/div/div[1]/button' await driver.findElement({xpath: search_xpath}).click() // 所属区域下拉选择 --end await driver.sleep(1000) // 判断当前页面表格是否有数据 await driver.executeScript(function(){ let ele1 = document.querySelector('.orioc-page-wraper') let ele2 = ele1.querySelector('.el-pagination__total').value if(ele2 != '共 0 条'){ // 说明有数据 点击第一条的详情 return } }) // 找到表格的第一行 await driver.wait(until.elementLocated({ xpath: '//*[@id="app"]/div[1]/div[2]/section/div/div[2]/div[1]/div[2]/div/div/div[2]/div[5]/div[2]/table/tbody/tr[1]' }), 2000) // 定位第一行的业务单元素 let row1_ele = await driver.wait(until.elementLocated({ xpath: '//*[@id="app"]/div[1]/div[2]/section/div/div[2]/div[1]/div[2]/div/div/div[2]/div[4]/div[2]/table/tbody/tr[1]/td[2]/div/p' }), 1000) // 点击详情按钮 await driver.wait(until.elementLocated({ xpath: '//*[@id="app"]/div[1]/div[2]/section/div/div[2]/div[1]/div[2]/div/div/div[2]/div[5]/div[2]/table/tbody/tr[1]/td[18]/div/button[2]' }), 5000).click() // 获取详情页面中业务单编号元素 let detail_ele = await driver.findElement({ xpath: '//*[@id="app"]/div[1]/div[8]/div/div[2]/div/div/div[1]/div/div/div/div/form/div/div/div/div'}) let txt1 = await row1_ele.getText() let txt2 = await detail_ele.getText() console.log('txt1', txt1) console.log('txt2', txt2) assert.strictEqual(txt1, txt2) await driver.sleep(1000) // 关闭业务单详情 // await driver.findElement({xpath: '//*[@id="app"]/div[1]/div[8]/div/div[1]/button'}).click() } finally{ // driver.quit() } })()
附上相关网站:
http://www.selenium.org.cn/1694.html
https://www.selenium.dev/zh-cn/documentation/getting_started/
https://www.selenium.dev/selenium/docs/api/javascript/module/selenium-webdriver/lib/until.html
本文来自博客园,作者:cmwang2017,转载请注明原文链接:https://www.cnblogs.com/bm20131123/p/15194049.html