环境配置和安装
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的一个实例,不是则测试用例通过