文章目录
Web网站开发流程
自动化测试
a测试分类
功能测试:检查实际的功能是否符合用户的需求。
性能测试:通过自动化测试工具模拟多种正常、峰值、负载条件来对系统的各项性能指标进行测试。
手工测试:制定case,测试工程师一步一步进行测试。
自动化测试:把以人为驱动的测试行为转化为机器自动执行的过程。
回归测试:修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。
b自动化测试优点
- 回归测试更方便
- 可以运行更多更繁琐的测试
- 更好地利用资源,一定程度上解放测试工程师
- 测试具有一致性和可重复性即测试用例的服用
c 适用自动化测试场景
- 任务测试明确,不会频繁变动
- 软件需求变动小
- 项目周期长,测试脚本可复用
Selenium相关
1、简介
Selenium是一个用于Web应用程序的自动化测试工具,它有以下特点:
- 开源免费;
- 支持主流浏览器:Chrome、Firefox、Safari等;
- 跨平台:Windows、Linux、Mac;
- 多语言:Python、Java、Ruby、Php、Js;
- 对Web支持良好,有丰富简单的API
2、Python下安装Selenium
sudo pip install selenium # Python2
sudo pip3 install selenium # Python3
Selenium操作流程
- 打开浏览器
- 打开网页
- 元素定位及交互操作
- 关闭浏览器
1、打开浏览器
创建浏览器对象
from selenium import webdriver
browser=webdriver.Chrome() # 创建一个浏览器对象
# browser = webdriver.Firefox()
# browser = webdriver.Safari()
# browser = webdriver.Edge()
关于谷歌浏览器webdriver的配置(点我)
关于Chrome用于爬虫的配置(点我)
2、打开网页
打开百度首页
browser.get('www.baidu.com')
网页前进和后退
browser.forward()
browser.back()
判断访问是否有效
# 获取当前URL
browser.current_url
# 获取网页标题
browser.title
3、元素定位(核心操作)
定位当前源代码的元素,函数返回该元素对象
元素名称 | webdriver API | 说明 |
---|---|---|
id | find_element_by_id() | |
name | find_element_by_name() | |
class name | find_element_by_class_name() | |
tag name | find_element_by_tag_name() | |
link text | find_element_by_link_text() | |
partial link text | find_element_by_partial_link_text() | |
xpath | find_element_by_xpath() | |
css selector | find_element_by_css_selector() |
id / name /class
# 实例:<input id="kw" name="wd" class="s_ipt" value="">
link text
# 示例:<a href="admin.php?m=user&a=ls">用户总数</a>
ele = browser.find_element_by_link_text(‘用户总数’)
partial link text (模糊查找)
# 示例:<a href="admin.php?m=user&a=ls">用户总数</a>
ele = browser.find_element_by_partial_link_text(‘总数’)
css selector
# 方法1
Chrome:右键,检查,Copy selector
Firefox:借助 firebug 等浏览器插件工具,右键检查元素,复制 CSS 路径即可
# 方法2
示例:<a href="javascript:;" data-toggle="modal" data-target="#loginModal">购买课程</a>
browser.find_element_by_css_selector(r'a[href="javascript:;"]')
# r‘tag_name[key=“value”]’
4、元素交互操作
由元素定位后返回的元素对象进行调用(不是浏览器对象)
函数 | 作用 |
---|---|
click() | 左击 |
context_click() | 右击 |
double_click() | 双击 |
send_keys() | 模拟按键输入 |
clear() | 清空元素内容(如输入框) |
submit() | 提交表单 |
drag_and_drop(source, target) | 拖拽鼠标 |
move_to_element() | 鼠标移动到一个元素上 |
click_and_hold() | 左击一个元素 |
有的网页需要将鼠标放到某个位置才显示具体内容(如导航),
这种情况下,直接定位网页元素是没用的。这时候,需要用到动作链(Action Chains)
from selenium.webdriver import ActionChains
actions = ActionChains(browser) # 创建动作链对象
actions.something_code_here() # 一些操作
actions.perform() # 执行
5、查看元素属性
ele.get_attribute('KEY') # 返回元素(标签)的属性
ele.text # 返回文本值
ele.id # 返回元素id
ele.size # 返回元素大小
6、浏览器等待
强制等待(不智能)
import time
time.sleep(秒数)
隐式等待(宏定义)
# 执行该语句后,browser再执行其他语句,无论有没有结果,都将等待 6 秒,再返回结果
browser.implicitly_wait(6)
显示等待:条件满足后停止等待,如果条件一直没满足,则超时后停止等待,转而执行其他语句
from selenium.webdriver.support.ui import WebDriverWait
wait = WebDriverWait(browser, 10) # 创建等待对象,10为超时时间
wait.until(funct) # 传入函数(等待条件)作为参数
# wait.until_not(funct)
7、浏览器窗口管理
查看窗口
browser.window_handles # 列出所有句柄
browser.current_window_handle
切换窗口
browser.switch_to_window()
关闭窗口
browser.close()
8、Alert对话框的处理
方法 | 作用 |
---|---|
switch_to_alert() | 切换到alter |
accept() | 确认 |
dismiss() | 取消 |
send_keys() | 有输入框才能使用,否则报错 |
9、关闭浏览器
browser.quit()
异常归档
1、NoSuchElementException异常
元素的id或name明明存在,但通过find_element_by_id()等函数查找时,报NoSuchElementException异常,解决方案:
如果 iframe 有 name 或 id 的话
switch_to_frame("name/id")