• 自动化测试及Selenium


    一、自动化测试

    自动化测试:将人为驱动的测试行为转化为机器执行的过程;
    自动化测试的优点
    (1)可以进行回归测试;
    (2)节约资源;
    (3)可靠性高且可以完成重复性测试;
    (4)能够完成手工测试无法完成的测试(精准计时)

    二、Selenium

    1. Selenium 介绍及安装

    Selenium 是一款用于web应用测试的工具,由 Selenium IDEWebdriverSelenium Grid组成;
    (1)Selenium IDE:录制自动化脚本的工具;
    (2)webDriver:驱动浏览器对Web元素进行操作;
    (3)Selenium Grid:是一个服务器,提供对浏览器实例访问的服务器列表,管理各个节点的注册和状态信息;
    安装命令:
    pip install selenium ==3.12.0(指定版本)

    2. Selenium 优势

    • 免费、小巧易安装;
    • 支持多语言:Java、Python、C#、javaScript
    • 支持多平台:windows、Linux、Mac
    • 支持多浏览器:chrome、Firefox、edge、safari
    • 支持分布式测试;

    3. 安装驱动

    谷歌浏览器驱动:驱动链接

    点开链接,选择与自己浏览器所对应的版本即可,由于采用Python来实现脚本开发,因此,解压后将chromedriver.exe 文件,放在安装Python的目录下;

    在这里插入图片描述
    在这里插入图片描述

    完成之后就可以进行下面操作啦~

    三、webDriver API

    1. 定位元素

    <1> id 定位

    id 是页面元素的属性,也是最常用的元素定位方式;
    主要通过查看页面元素的 id 来进行定位(唯一);

    如:经常访问的百度页面,通过查看可以知道其输入框的 id,如下图所示:
    在这里插入图片描述
    同样的方法就可以定位到其他页面元素的 id

    方法

             find_element_by_id("kw")  :定位到百度输入框;
    
    • 1

    <2> name 定位

    如果页面元素有name,并且元素的name命名在整个页面是唯一的,那么我们可以用name来定位这个元素;

    同样的,可以通过上面方法找到name属性的值;
    在这里插入图片描述
    方法

           find_element_by_name("wd")  :定位到百度输入框
    
    • 1

    <3> class name 定位

    定位之前需要保证唯一性!

    在这里插入图片描述
    方法

      find_element_by_class_name("s_ipt")  :定位到百度输入框;
    
    • 1

    <4> tag name 定位

    tag name: 标签名

    方法

    find_element_by_tag_name("input")  :定位到百度输入框;
    
    • 1

    <5> link text 定位

    link text:可以通过链接内容,也就是 link text来对文字链接进行定位;
    需要注意的是:链接内容必须这个页面唯一,否则会报错;

    方法

     find_element_by_link_text("hao123")
    
    • 1

    在这里插入图片描述

    <6> partial link text 定位

    只用链接的一部分文字进行匹配;

    方法

        find_element_by_partial_link_text("hao")
    
    • 1

    <7> xpath 定位

    该定位方式全局唯一,查找方法:
    找到要定位的页面元素,右击—>检查---->copy----> copy xpath

    <8> css selector 定位

    • 方法1
    find_element_by_css_selector("#kw")
    
    • 1
    • 方法2

    页面元素-----右键----copy----copy selector 来获取

    2. 操作测试对象

    定位好之后需要对这个元素进行操作,具体什么操作,取决于需求,常见的有以下几种:

    • 鼠标点击:click
    • 键盘输入:send_keys
    • 清除元素的内容:clear
    • 提交表单:submit
    • 获取文本信息:text

    case1:打开百度,搜索电视剧《天才基本法》

    代码

    # 打开百度,搜索电视剧天才基本法
    # 导入需要的工具包
    from selenium import webdriver
    import time
    
    # 获取浏览器驱动
    driver = webdriver.Chrome()
    time.sleep(3)
    
    # 获取百度页面
    driver.get("http://www.baidu.com")
    time.sleep(3)
    
    # 定位百度输入框,采用id定位的方式来定位元素,之后输入天才基本法
    driver.find_element_by_id("kw").send_keys("天才基本法")
    time.sleep(3)
    driver.find_element_by_id("su").click()
    time.sleep(3)
    
    # 关闭浏览器
    driver.quit()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    case2:获取百度页面最下面的文字

    在这里插入图片描述

    代码

    # 导入需要的工具包
    from selenium import webdriver
    import time
    
    # 获取浏览器驱动
    driver = webdriver.Chrome()
    time.sleep(3)
    
    # 获取百度页面
    driver.get("http://www.baidu.com")
    time.sleep(3)
    
    data = driver.find_element_by_id("bottom_layer").text
    print(data)
    time.sleep(3)
    
    # 关闭浏览器
    driver.quit()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    结果如下:
    在这里插入图片描述

    3. 添加等待

    • 固定等待sleep()
    • 智能等待implicitly_wait()

    4. 打印信息

    • 打印 URL
    # 导入需要的工具包
    from selenium import webdriver
    import time
    
    # 获取浏览器驱动
    driver = webdriver.Chrome()
    time.sleep(3)
    
    # 获取百度页面
    driver.get("http://www.baidu.com")
    time.sleep(3)
    
    print(driver.current_url)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    打印结果

    在这里插入图片描述

    • 打印 title
    # 导入需要的工具包
    from selenium import webdriver
    import time
    
    # 获取浏览器驱动
    driver = webdriver.Chrome()
    time.sleep(3)
    
    # 获取百度页面
    driver.get("http://www.baidu.com")
    time.sleep(3)
    
    print(driver.title)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    打印结果

    在这里插入图片描述

    5. 操作浏览器

    • 浏览器最大化maximize_window()
    # 导入需要的工具包
    from selenium import webdriver
    import time
    
    # 获取浏览器驱动
    driver = webdriver.Chrome()
    time.sleep(3)
    
    # 获取百度页面
    driver.get("http://www.baidu.com")
    time.sleep(3)
    
    driver.maximize_window()
    time.sleep(2)
    
    driver.quit()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 设置浏览器宽和高set_window_size(480,800)
    # 导入需要的工具包
    from selenium import webdriver
    import time
    
    # 获取浏览器驱动
    driver = webdriver.Chrome()
    time.sleep(3)
    
    # 获取百度页面
    driver.get("http://www.baidu.com")
    time.sleep(3)
    
    driver.set_window_size(480,800)
    time.sleep(2)
    
    driver.quit()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 设置浏览器前进与后退forward()back()
    from selenium import webdriver
    import time
    
    # 访问百度首页
    driver = webdriver.Chrome()
    first_url = 'http://www.baidu.com'
    
    driver.get(first_url)
    time.sleep(2)
    
    # 访问新闻页面
    second_url='http://news.baidu.com'
    
    driver.get(second_url)
    time.sleep(2)
    
    # 返回(后退)到百度首页
    print("back to %s "%(first_url))
    driver.back()
    time.sleep(1)
    # 前进到新闻页
    print("forward to %s"%(second_url))
    driver.forward()
    time.sleep(2)
    driver.quit()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    在这里插入图片描述

    6. 键盘事件

    注意:要使用键盘按键,必须引入keys

    导包格式from selenium.webdriver.common.keys import Keys

    通过send_keys()调用按键(单个形式):

    • Tab 键 :send_keys(Keys.TAB)
    • 回车键:send_keys(Keys.Enter)
    • 空格键:send_keys(Keys.Space)
    • Esc回退键:send_keys(Keys.ESCAPE)

    通过send_keys()调用按键(组合形式):

    • 全选:send_keys(Keys.CONTROL,'a')
    • 复制:send_keys(Keys.CONTROL,'c')
    • 粘贴:send_keys(Keys.CONTROL,'v')
    • 剪贴:send_keys(Keys.CONTROL,'x')

    case:打开百度,将浏览器最大化,之后输入“刷牙步骤”,完成后,全选并剪切,重新搜素“webdriver

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    driver.maximize_window()
    time.sleep(3)
    # 输入框输入内容
    driver.find_element_by_id("kw").send_keys("刷牙步骤")
    time.sleep(3)
    # ctrl+a 全选输入框内容
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
    time.sleep(3)
    # ctrl+x 剪切输入框内容
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
    time.sleep(3)
    # 输入框重新输入内容,搜索
    driver.find_element_by_id("kw").send_keys("webdriver")
    time.sleep(3)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    7. 鼠标事件

    注意:要使用鼠标事件,必须进行导包;

    导包格式from selenium.webdriver.common.action_chains import ActionChains

    • 右击: context_click() (前提先定位元素)
    • 双击:double_click() (前提先定位元素)
    • 拖动:drag_and_drop()
    • 移动:move_to_element()

    case:打开百度浏览器,最大化,然后搜索张三,再进行右击和双击操作

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    import time
    driver = webdriver.Chrome()
    # 获取新闻页面
    driver.get("http://www.baidu.com")
    driver.maximize_window()
    driver.find_element_by_id("kw").send_keys("张三")
    time.sleep(3)
    driver.find_element_by_id("su").click()
    b = driver.find_element_by_id("su")
    # 右击
    ActionChains(driver).context_click(b).perform()
    time.sleep(3)
    # 双击
    ActionChains(driver).double_click(b).perform()
    time.sleep(3)
    driver.quit()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    小结

    • selenium 安装 及自动化测试的优势

    webDriver API:

    • 定位元素方式: id,name,tag name,xpath, link text,partial link text ,class name,css selectot
    • 常用方法:

    clear() :清除文本
    send_keys(value) :键盘输入
    click() :单击元素
    submit() :提交表单
    text :获取元素的文本
    quit():退出浏览器操作

    • 操作浏览器:

    driver.set_window_size(value,value):设置浏览器的大小,单位是像素;
    driver.maximize_window():浏览器最大化;
    driver.back():控制浏览器后退 ;
    driver.forward():控制浏览器前进;

    • 获取信息:

    driver.title:获取网页标题
    driver.current_url:获取网页url

    • 鼠标事件:

    context_click() :右击
    double_click() :双击
    drag_and_drop() :拖动
    move_to_element() :移动

    今天就先分享这么多啦,下一篇定位一组元素以及层级定位,加油,铁子们(别忘了点赞+收藏)~~

  • 相关阅读:
    [leetcode]95.不同的二叉搜索树
    Vue路由及Node.js环境搭建
    jvm题库详解
    java计算机毕业设计H5新冠防疫宣传网站设计与实现源码+mysql数据库+系统+lw文档+部署
    极兔、百世快递的物流信息怎么批量查询?
    Sam Altman重回OpenAI,工牌成亮点
    python之路~~~~~正则表达式绕waf案例分析
    (阿里云)Linux部署SSM项目全过程
    初识猿如意开发工具
    2023年中国劳保用镜市场规模现状及行业需求前景分析[图]
  • 原文地址:https://blog.csdn.net/m0_52083255/article/details/126138427