Python3+Selenium实现web自动化测试项目入门

Python3+Selenium3实现web自动化测试项目入门

环境及工具

· 系统:windows 64位
· 开发工具:Python 3
· 自动化测试工具 Selenium3
· 脚本工具 sublime Text3
· 浏览器:Firefox

Selenium作为WebUI自动化测试工具的优势

· 主流且开源
· 支持主流浏览器如Firefox、chrome、IE
· 支持多种开发语言如python、Java、PHP
· 跨平台,支持多种操作系统mac、windows、linux等64位系统
常用的自动化测试工具

安装说明

  1. 安装Python3
  2. 自动化测试环境搭建Selenium3安装:
    (1)下载地址:https://pypi.org/project/selenium/
    (2)在解压好的目录下进行安装 python setup.py install
  3. 安装浏览器驱动
    火狐:https://github.com/mozilla/geckodriver/releases
    下载driver、拷贝到浏览器安装路径、配置环境变量

selenium打开Firefox

from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://baidu.com")

selenium定位元素的8种方法

  1. 采用ID 属性 :find_element_by_id()
  2. 采用class name属性:find_element_by_class_name()
  3. 采用class name属性:find_element_by_name()
定位到元素后的方法

clear() 清空;send_keys() 输入; back() 后退页面;maximize_windows() 最大化窗口; click() 点击; submit() 提交表单

定位到元素后的属性

tag_name: 标签名
text: 文本内容

  1. 采用tag_name属性:find_element_by_tag_name()
  2. 超链接内容:find_element_by_link_text()
  3. 超链接内容定位,模糊匹配:find_element_by_partial_link_text()
  4. css_selector: find_element_by_css_selector()
    根据CSS属性定位,一般class是用.标记,id是用#标记,定位方式也会比xpath快
    技巧:通过firebug的拷贝css路径
    路径:检查元素-》右键-》复制-》css选择器
  5. xpath: find_element_by_xpath()
    xpath语法

ActionChains模拟用户行为

需要模拟鼠标才能进行的情况,如单击,双击,右击,拖拽等
selenium提供了一个类来处理这类事件selenium.webdriver.common.action_chains.ActionChains(driver)

导入模块

from selenium.webdriver.common.action_chains import ActionChains

调用ActionChains的方法时不会立即执行,会将所有的操作按顺序存放在一个队列里,当调用perform()方法时,队列中的事件会依次执行
如:

ActionChains(driver).click(ele).perform()

事件列表:

perform() 执行链中的所有动作

click(on_element=None) 单击鼠标左键

context_click(on_element=None) 点击鼠标右键

double_click(on_element=None) 双击鼠标左键

move_to_element(to_element) 鼠标移动到某个元素
		
ele.send_keys(keys_to_send) 发送某个词到当前焦点的元素

========== 不常用 ==========

click_and_hold(on_element=None) 点击鼠标左键,不松开

release(on_element=None) 在某个元素位置松开鼠标左键

key_down(value, element=None) 按下某个键盘上的键

key_up(value, element=None) 松开某个键

drag_and_drop(source, target) 拖拽到某个元素然后松开

drag_and_drop_by_offset(source, xoffset, yoffset) 拖拽到某个坐标然后松开

move_by_offset(xoffset, yoffset) 鼠标从当前位置移动到某个坐标

move_to_element_with_offset(to_element, xoffset, yoffset) 移动到距某个元素(左上角坐标)多少距离的位置

send_keys_to_element(element, keys_to_send) 发送某个键到指定元素

网页等待时间

网页需要加载对应的资源文件,页面渲染,窗口处理等等

  1. 强制等待:
from time import sleep   
sleep(5)  # 强制等待5秒再执行下一步,缺点是不管资源是不是完成,都必须等待
  1. 隐性等待:
    设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。弊端就是程序会一直等待整个页面加载完成,到浏览器标签栏那个加载圈不再转
    注意:对driver起作用,所以只要设置一次即可,没有必要到处设置,在unittest框架中放入Test_setUp()中
driver.implicitly_wait(10)  # 隐性等待,最长等10秒
  1. 显性等待:
    WebDriverWait 需要配合 until和until_not,程序每隔N秒检查一次,如果成功,则执行下一步,否则继续等待,直到超过设置的最长时间
    语法:WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = 'https://baidu.com'
# url = 'https://www.tmall.com'
# 拿到diver
driver = webdriver.Firefox()


# 跳转网页
driver.get(url)
# print(driver.title) # 使用python判断网页名称是否正确

try:
	# 显性等待
    search_ele = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"kw")))
    search_ele.send_keys("小D课堂")
    print("资源加载成功")
    print(driver.title)
except:
	print("资源加载失败,发送报警邮件或短信")
finally:
	print("不管有没有成功,都打印,用于资源清理")
	driver.quit() # 退出

弹窗处理

弹窗常用方法(需要先切换窗口 switch_to_alert() )
accept() 表示接受
dismiss() 表示取消

错误截图

driver.get_screenshot_as_file("./error_png.png")

单元测试unittest

单元测试是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义。
如C语言中单元指一个函数,Java中指一个类,而图形化的软件可以指一个窗口或菜单。
总的来说单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

unittest是python中的单元测试框架
unittest = TestCase + Testresult 执行用例 + 结果

# -*- coding: UTF-8 -*-
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值