zoukankan      html  css  js  c++  java
  • 基于nodejs的selenium的自动化测试这环境安装

    Selenium 通过使用 WebDriver 支持市场上所有主流浏览器的自动化。每个浏览器都有一个特定的WebDriver,称为驱动程序,用于控制web浏览器的行为。

     如下为各浏览器对应的驱动:

    Browser                     Component

    Chrome                      chromedriver(.exe)

    Internet Explorer          IEDriverServer.exe

    Edge                          MicrosoftWebDriver.msi

    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

     

  • 相关阅读:
    冒泡排序算法分析和实现
    选择排序算法分析与实现
    nio和 bio
    TCP三次握手
    IE input X 去掉文本框的叉叉和密码输入框的眼睛图标
    <%#eval() %>和<%#bind() %> 的区别
    <%#Eval() %>的常用方法
    C#(ASP.net)从其他网站抓取内容并截取有用信息
    JQuery写的一个简单的分页插件-2
    简单实用的jQuery分页插件
  • 原文地址:https://www.cnblogs.com/bm20131123/p/15194049.html
Copyright © 2011-2022 走看看