selenium+python网页自动化测试

环境配置和安装

pip安装selenium

pip install selenium

检测环境是否安装成功,不报错说明没问题

python
from selenium import webdriver

浏览器驱动下载地址https://docs.seleniumhq.org/download/,直接找到对应浏览器的驱动,例如Google Chrome Driver
下载驱动后,把驱动放入到我们python的安装目录

启动谷歌浏览器

#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()

实战代码

from selenium import webdriver
driver = webdriver.Chrome()
#打开网址
driver.get('http://www.baidu.com')
#获取输入框id
inputID = driver.find_element_by_id('kw')
inputID.clear()
#输入搜索内容
inputID.send_keys(u"自动化测试")
#单击搜索按钮
driver.find_element_by_id('su').click()
#等待三秒
time.sleep(3)
#退出浏览器
driver.quit()

常见定位方法

  • 定位页面中的元素
find_element_by_id		#按照ID元素定位
find_element_by_name		#按照NAME元素定位
find_element_by_xpath		#通过XPATH元素定位
find_element_by_link_text		#通过Link Text元素定位(通过链接文本找超链接)
find_element_by_partial_link_text
find_element_by_tag_name		#通过标记名称查找元素
find_element_by_class_name		#通过标记名称查找元素
find_element_by_css_selector		#通过CSS选择器查找元素
  • 查找多个元素(这些方法将返回一个列表)
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

操作元素方法

  • clear 清除元素的内容
  • send_keys 模拟按键输入
  • click 点击元素
  • submit 提交表单
from selenium import webdriver  
from selenium.webdriver.common.keys import Keys  
import time
 
# Login 163 email
driver = webdriver.Firefox()  
driver.get("http://mail.163.com/")
 
elem_user = driver.find_element_by_name("username")
elem_user.clear
elem_user.send_keys("15201615157")  
elem_pwd = driver.find_element_by_name("password")
elem_pwd.clear
elem_pwd.send_keys("******")  
elem_pwd.send_keys(Keys.RETURN)
#driver.find_element_by_id("loginBtn").click()
#driver.find_element_by_id("loginBtn").submit()
time.sleep(5)  
assert "baidu" in driver.title  
driver.close()  
driver.quit()

WebElement接口获取值

  • size 获取元素的尺寸
  • text 获取元素的文本
  • get_attribute(name) 获取属性值
  • location 获取元素坐标,先找到要获取的元素,再调用该方法
  • page_source 返回页面源码
  • driver.title 返回页面标题
  • current_url 获取当前页面的URL
  • is_displayed() 设置该元素是否可见
  • is_enabled() 判断元素是否被使用
  • is_selected() 判断元素是否被选中
  • tag_name 返回元素的tagName
from selenium import webdriver  
from selenium.webdriver.common.keys import Keys  
import time
 
driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")   
driver.get("http://www.baidu.com/")
 
size = driver.find_element_by_name("wd").size
print size
#尺寸: {'width': 500, 'height': 22}
 
news = driver.find_element_by_xpath("//div[@id='u1']/a[1]").text
print news
#文本: 新闻
 
href = driver.find_element_by_xpath("//div[@id='u1']/a[2]").get_attribute('href')
name = driver.find_element_by_xpath("//div[@id='u1']/a[2]").get_attribute('name')
print href,name
#属性值: http://www.hao123.com/ tj_trhao123
 
location = driver.find_element_by_xpath("//div[@id='u1']/a[3]").location
print location
#坐标: {'y': 19, 'x': 498}
 
print driver.current_url
#当前链接: https://www.baidu.com/
print driver.title
#标题: 百度一下, 你就知道
 
result = location = driver.find_element_by_id("su").is_displayed()
print result

鼠标操作

  • context_click(elem) 右击鼠标点击元素elem,另存为等行为
  • double_click(elem) 双击鼠标点击元素elem,地图web可实现放大功能
  • drag_and_drop(source,target) 拖动鼠标,源元素按下左键移动至目标元素释放
  • move_to_element(elem) 鼠标移动到一个元素上
  • click_and_hold(elem) 按下鼠标左键在一个元素上
  • perform() 在通过调用该函数执行ActionChains中存储行为
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
 
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
 
#鼠标移动至图片上 右键保存图片
elem_pic = driver.find_element_by_xpath("//div[@id='lg']/img")
print elem_pic.get_attribute("src")
action = ActionChains(driver).move_to_element(elem_pic)
action.context_click(elem_pic)
 
#重点:当右键鼠标点击键盘光标向下则移动至右键菜单第一个选项
action.send_keys(Keys.ARROW_DOWN)
time.sleep(3)
action.send_keys('v') #另存为
action.perform()

键盘操作

  • send_keys(Keys.ENTER) 按下回车键
  • send_keys(Keys.TAB) 按下Tab制表键
  • send_keys(Keys.SPACE) 按下空格键space
  • send_keys(Kyes.ESCAPE) 按下回退键Esc
  • send_keys(Keys.BACK_SPACE) 按下删除键BackSpace
  • send_keys(Keys.SHIFT) 按下shift键
  • send_keys(Keys.CONTROL) 按下Ctrl键
  • send_keys(Keys.ARROW_DOWN) 按下鼠标光标向下按键
  • send_keys(Keys.CONTROL,‘a’) 组合键全选Ctrl+A
  • send_keys(Keys.CONTROL,‘c’) 组合键复制Ctrl+C
  • send_keys(Keys.CONTROL,‘x’) 组合键剪切Ctrl+X
  • send_keys(Keys.CONTROL,‘v’) 组合键粘贴Ctrl+V
#coding=utf-8
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
 
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
 
#输入框输入内容
elem = driver.find_element_by_id("kw")
elem.send_keys("Eastmount CSDN")
time.sleep(3)
 
#删除一个字符CSDN 回退键
elem.send_keys(Keys.BACK_SPACE)
elem.send_keys(Keys.BACK_SPACE)
elem.send_keys(Keys.BACK_SPACE)
elem.send_keys(Keys.BACK_SPACE)
time.sleep(3)
 
#输入空格+"博客"
elem.send_keys(Keys.SPACE)
elem.send_keys(u"博客")
time.sleep(3)
 
#ctrl+a 全选输入框内容
elem.send_keys(Keys.CONTROL,'a')
time.sleep(3)
 
#ctrl+x 剪切输入框内容
elem.send_keys(Keys.CONTROL,'x')
time.sleep(3)
 
#输入框重新输入搜索
elem.send_keys(Keys.CONTROL,'v')
time.sleep(3)
 
#通过回车键替代点击操作
driver.find_element_by_id("su").send_keys(Keys.ENTER)
time.sleep(3)

断言

  • assertEqual(a, b, [msg=‘测试失败时打印的信息’]) # a == b 断言a和b是否相等,相等则测试用例通过
  • assertNotEqual(a,b,[msg=‘测试失败时打印的信息’]) # a != b 断言a和b是否相等,不相等则测试用例通过
  • assertTrue(x,[msg=‘测试失败时打印的信息’]) # x is True 断言x是否True,是True则测试用例通过
  • assertFalse(x,[msg=‘测试失败时打印的信息’]) # x is False 断言x是否False,是False则测试用例通过
  • assertIn(a,b,[msg=‘测试失败时打印的信息’]) # a in b 断言a是否在b中,在b中则测试用例通过
  • assertNotIn(a,b,[msg=‘测试失败时打印的信息’]) # a not in b 断言a是否在b中,不在b中则测试用例通过
  • assertIsNone(x,[msg=‘测试失败时打印的信息’]) # x is None 断言x是否None,是None则测试用例通过
  • assertIsNotNone(x,[msg=‘测试失败时打印的信息’]) # x not is None 断言x是否None,不是None则测试用例通过
  • assertIs(a,b,[msg=‘测试失败时打印的信息’]) # a is b 断言a是否是b,是则测试用例通过
  • assertNotIs(a,b,[msg=‘测试失败时打印的信息’]) # a not is b 断言a是否是b,不是则测试用例通过
  • assertIsInstance(a,b,[msg=‘测试失败时打印的信息’]) # 断言a是是b的一个实例,是则测试用例通过
  • assertNotIsInstance(a,b,[msg=‘测试失败时打印的信息’]) # 断言a是是b的一个实例,不是则测试用例通过
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值