selenium框架

本文档详细介绍了使用Python的Selenium库进行自动化测试的各个方面,包括Selenium的特点、测试环境搭建、前端工具的使用、元素定位方法、浏览器控制、鼠标和键盘事件、处理验证信息、设置元素等待、多窗口和表单切换、警告框处理、文件上传和下载、操作cookie、调用JavaScript等。还探讨了Selenium Grid2用于分布式测试的概念,以及如何在多线程环境中执行测试用例。
摘要由CSDN通过智能技术生成

selenium

(仅作为个人笔记,如有雷同,请联系删除。。)

1、Selenium的特点:

开源、免费,多浏览器支持,多平台支持,多语言支持,对Web页面有良好的支持,API简单,灵活(用开发语言驱动),支持分布式测试用例执行。

2、Windows下的测试环境搭建:

  1. 安装Python;
  2. 安装setuptools与pip(注:Python3不支持setuptools,但已经集成了pip)
  3. 安装Selenium:pip install Selenium

    指定版本号安装:pip install selenium==版本号
    查看当前包的版本信息:pip show selenium
    卸载当前安装包:pip uninstall selenium

3、前端工具:

  1. FireBug:可通过它方便的查看页面上的元素,从而根据其属性进行定位。

    安装: Firfox浏览器菜单栏—>tools—>add-ons
    Manager[添加组件]—>搜索FireBug—>安装—>重启浏览器—>工具栏中可看到FireBug按钮

  2. FirePath:编辑、检查和生成XPath1.0表达式、CSS 3选择器以及jQuery选择器;可帮助我们通过XPath和CSS来快速定位页面上的元素

    安装:与FireBug类似

  3. Chrome开发人员工具:Chrome浏览器—>右上角菜单—>工具—>开发人员工具。【F12,较为常用】

  4. IE 开发人员工具:IE浏览器—>F12 / 右上角工具—>F12开发人员工具

4、实例:编写第一个自动化脚本

# coding=utf-8  // # _*_coding:utf-8_*_也可以  # 声明编码类型,py2需要,py3不需要

from selenium import webdriver # 导入webdriver包

driver = webdriver.Firefox() # 获取浏览器驱动
# driver = webdriver.Chrome()
# driver = webdriver.Ie()
driver.get("http://www.baidu.com") # 通过get()方法,向浏览器发送网址
driver.find_element_by_id("kw").send_keys("daqiang") # 定位百度的输入框并输入内容
driver.find_element_by_id("su").click() # 定位“百度一下”搜索按钮并点击
driver.quit() # 退出并关闭浏览器及相关的驱动程序
  1. Firefox浏览器驱动默认已经在webdriver中,可直接调用;IE和Chrome的浏览器驱动需要另行下载安装

    注:各个浏览器驱动下载地址:http://www.seleniumhq.org/download/

  2. Chrome浏览器驱动—>下载ChromeDriver_win64.zip,解压得到Chromedriver.exe,放到D:\python\目录下(因为D:\python已经添加到系统环境变量Path下)

  3. IE浏览器驱动—>下载IEDriverServer_Win64_x.xx.zip,解压得到IEDriverServer.exe—>同上

5、WebDriver提供的8种元素定位的方法:

<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">   #百度的输入框
<input id="su" value="百度一下" class="bg s_btn" type="submit">   # 百度的搜索按钮 
  1. find_element_by_id():通过id属性来定位元素(id属性是唯一的)

    eg:find_element_by_id(“kw”)—>百度的输入框

  2. find_element_by_name():通过name属性来定位元素

    eg:find_element_by_name(“wd”)—>百度的输入框

  3. find_element_by_class_name():通过class属性来定位元素(HTML中,class属性指定元素的类名)

    eg:find_element_by_class_name(“s_ipt”)—>百度的输入框

  4. find_element_by_tag_name():通过标签名来定位元素(很难用来定位),

    eg:find_element_by_tag_name(“input”)—>可以是输入框,也可以是搜索按钮,无法区分到底是输入框还是搜索按钮,不能用来定位

  5. find_element_by_link_text():专门用来定位文本链接,通过链接元素标签对之间的文本来定位元素
    eg:百度输入框上面的几个文本链接代码如下:

    <a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
        --->find_element_by_link_text("新闻")
    <a href="https://www.hao123.com" name="tj_trhao123" class="mnav">hao123</a>
        --->find_element_by_link_text("hao123")
    <a href="http://map.baidu.com" name="tj_trmap" class="mnav">地图</a>
        --->find_element_by_link_text("地图")
    <a href="http://v.baidu.com" name="tj_trvideo" class="mnav">视频</a>
        --->find_element_by_link_text("视频")
    <a href="http://tieba.baidu.com" name="tj_trtieba" class="mnav">贴吧</a>
        --->find_element_by_link_text("贴吧")
    
  6. find_element_by_partial_link_text():通过链接元素标签对之间的部分文本来定位元素
    eg:有一个链接标签:

    <a href="。。。" name="tj_trtieba" class="mnav">一个很长很长的文本链接</a>
    

    对其定位:—>find_element_by_partial_link_text(“一个很长很长的”)

  7. find_element_by_xpath()XPath定位
    (1). 绝对路径定位:XPath的绝对路径定位,主要用标签名的层级关系来定位元素的绝对路径,“div[2]”表示当前层级下的第二个div标签
    eg:find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input"),百度的输入框 find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input"),百度搜索按钮
    (2). 利用元素属性定位

    1. XPath的绝对路径定位,主要用标签名的层级关系来定位元素的绝对路径,“div[2]”表示当前层级下的第二个div标签
      eg:find_element_by_xpath("//input[@id='kw']")
      find_element_by_xpath("//input[@name='wd']") —>百度输入框find_element_by_xpath("//input[@class='s_ipt']")
    2. 如果不想指定标签名,也可以用*代替
      eg:find_element_by_xpath("//*[@class='bg s_btn']")—>百度搜索按钮

    (3). 层级与属性结合:如果父级元素没有可利用的属性值,可以继续向上找“爷爷”级元素
    eg:find_element_by_xpath("//span[@class='bg s_ipt_wr']/input")

      注:span[@class='bg s_ipt_wr']通过class属性定位到父级元素,后面的/input表示父级元素下面的子元素
    

    (4). 使用逻辑运算符and:也可以用“and”连接更多的属性来唯一的标识一个元素。
    eg:find_element_by_xpath("//input[@id='kw' and @class='su']")—>同时使用id和class唯一的标识这个元素
    (5). 补充:contains的用法a[contains(@href, 'NameOnly')] ,表示选取href中包含NameOnly的a元素
    (6). 补充:定位当前元素的兄弟元素

    ../div[@="class"]/preceding-sibling::div[1]  ,前一位
    ../div[@="class"]/following-sibling::div[1]  ,后一位
    ../div[@="class"]/preceding-sibling::div[N]  ,前n位
    ../div[@="class"]/following-sibling::div[N]  ,后n位
    

    (7). 补充:定位当前元素的父元素:.. 表示选取当前节点的父节点
    eg://tbody/tr/td/a[contains(@href,'NameOnly')]``/../..``/td[2]
    (8). 补充1:在Firefox浏览器中,点击FireBug插件左上角的鼠标箭头,再单击网页上需要定位的元素,在元素行上右键弹出快捷菜单,选择“复制XPath”,将会获得当前元素的XPath语法。
    (9). 补充2:在Firefox浏览器中,使用FirePath插件,选中元素后,直接在XPath的输入框中生成当前元素的XPath语法。

  8. find_element_by_css_selector()CSS定位(CSS:层叠样式表)

    1. element_by_css_selector(".class属性值")--------->通过class属性定位
      eg:find_element_by_css_selector(".s_ipt")—>百度输入框
    2. find_element_by_css_selector("#id值")---------->通过id属性定位
      eg:find_element_by_css_selector("#kw")—>百度输入框
    3. find_element_by_css_selector("*")-------------->选择所有元素
    4. find_element_by_css_selector("标签名")---------->通过标签名定位,但很难找到想要的元素
      eg:find_element_by_css_selector(“input”)
    5. find_element_by_css_selector("父标签名>子标签名")---------->通过父子关系定位,定位子元素
      eg:find_element_by_css_selector(“span>input”)—>查找父元素为span,本身标签名为input的子元素
    6. find_element_by_css_selector("[属性=属性值]")------------->通过属性定位,属性值可加引号,也可不加,但要与外面的引号区分开
      eg:find_element_by_css_selector("[type=‘submit’]")
    7. find_element_by_css_selector("父标签名.class属性值>子标签名.class属性值")—>组合定位,将前面的定位策略组合起来使用
      eg:find_element_by_css_selector(“span.bg s_ipt_wr>input…s_ipt”) 注:定位的还是子元素
    8. 补充:可使用FireBug工具辅助生成CSS语法,通过FireBug定位元素,在元素上右键,选择“复制CSS路径”。
    9. 补充:也可使用FirePath插件辅助生成CSS语法。

6、用By定位元素:针对上面的8种定位方法,提供的另一套写法——即统一调用find_element()方法,通过By来声明定位的方法,并且传入对应定位方法的定位参数。

from selenium.webdriver.common.by import By

  1. find_element(By.ID, "id属性值")
  2. find_element(By.NAME, "name属性值")
  3. find_element(By.CLASS_NAME, "class属性值")
  4. find_element(By.TAG_NAME, "标签名")
  5. find_element(By.LINK_TEXT, "链接元素标签对之间的文本内容")
  6. find_element(By.PARTIAL_LINK_TEXT, "链接元素标签对之间的部分文本")
  7. find_element(By.XPATH, "XPath语法")
  8. find_element(By.CSS_SELECTOR, "css语法")
> 注:find\_element()方法需要两个参数,第一个参数为定位类型,由By提供,第二个参数为定位参数

7、控制浏览器:

  1. 控制浏览器窗口大小:set_window_size(宽,高)
    全屏显示maximize_window() —>不需要参数

    # 举例:控制浏览器窗口大小
    from selenium import webdriver
    
    driver = webdriver.Firefox()
    driver.get("http://m.mail.10086.cn")
    print("设置为移动端大小:宽480,高800显示")
    driver.set_window_size(480, 800)   #   driver.maximize_window()
    driver.quit()
    
  2. 使用后退和前进按钮在浏览过的网页之间切换:
    back()--------->后退
    forward()----->前进

    # 举例:使用后退和前进按钮在浏览过的网页之间切换
    from selenium import webdriver
    
    driver = webdriver.Firefox()
    first_url='http://www.baidu.com'
    print("now: %s" % first_url)
    driver.get(first_url)
    second_url='http://news.baidu.com'
    print("now: %s" % second_url)
    driver.get(second_url)
    print("back to: %s" % first_url)
    driver.back()  # 回退
    print("forward to : %s" % second_url)
    driver.forward()  # 前进
    driver.quit()
    
  3. 模拟浏览器刷新driver.refresh()----->刷新当前页面

8、简单元素操作:

  1. clear() :清除文本
  2. send_keys(*value) :模拟按键输入
  3. click() :单击元素
# eg:126邮箱登录:
from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.126.com")
driver.find_element_by_id("idInput").clear() #清除文本输入框的内容(默认提示信
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值