Python3.5 + Selenium3.4 + Webdriver 自动化测试

 

Selenium Driver下载地址

selenium 下载地址:https://docs.seleniumhq.org/download/

selenium 源码github:https://github.com/SeleniumHQ/selenium

chromedriver 下载地址:http://chromedriver.storage.googleapis.com/index.html

 

1. 浏览器的操作

driver.maximize_window()          # 将浏览器最大化显示 
driver.set_window_size(480, 800)  # 设置浏览器宽480、高800显示
driver.back()                     # 浏览器后退
driver.forward()                  # 浏览器前进
driver.capabilities['version']    # 打印浏览器version的值  

 

2. 简单对象的定位

能通过id和name的,尽量不要用xpath和css

driver.find_element_by_id()
driver.find_element_by_name()
driver.find_element_by_class_name()
driver.find_element_by_tag_name()
driver.find_element_by_link_text()
driver.find_element_by_partial_link_text()
driver.find_element_by_xpath()
driver.find_element_by_css_selector()

 

3. 操作测试对象

driver.find_element_by_id("xx").clear() 			# 用于清除输入框的默认内容
driver.find_element_by_id("xx").send_keys("xx") 	# 用于在一个输入框里输入 xx 内容
driver.find_element_by_id("xx").click() 			# 用于单击一个按钮
driver.find_element_by_id("xx").submit() 			# 提交表单
driver.driver.find_element_by_id("xx").size 		# 返回元素的尺寸
driver.find_element_by_id("xx").text 				# 获取元素文本

# 返回元素的属性值,可以是id、name、type或元素拥有的其它任意属性 
如果是input的,可以通过获取value值获得当前输入的值
driver.find_element_by_id("xx").get_attribute('value') 

# 返回元素的结果是否可见,返回结果为True或False 
driver.find_element_by_id("kxx").is_displayed()

 

4. 鼠标事件

# 引入ActionChains类 
from selenium.webdriver.common.action_chains import ActionChains 

# 定位鼠标元素
mouse =driver.find_element_by_xpath("xx")

# 鼠标右击
ActionChains(driver).context_click(mouse).perform()			# 对定位到的元素执行鼠标右键操作

# 鼠标双击
ActionChains(driver).double_click(mouse).perform() 			# 对定位到的元素执行鼠标双击操作

# 鼠标移动上元素上
ActionChains(driver).move_to_element(mouse).perform()		# 对定位到的元素执行鼠标移动到上面的操作 

# 按下鼠标左键
ActionChains(driver).click_and_hold(mouse).perform()		# 对定位到的元素执行鼠标左键按下的操作 

# 鼠标拖放
element = driver.find_element_by_name("xxx") 				# 定位元素的原位置 
target = driver.find_element_by_name("xxx")					# 定位元素要移动到的目标位置 
ActionChains(driver).drag_and_drop(element, target).perform()#执行元素的移动操作

 

5. 键盘事件

# 引入Keys类包 
from selenium.webdriver.common.keys import Keys 

driver.find_element_by_id("xx").send_keys(Keys.BACK_SPACE) 		# 删除键(BackSpace)
driver.find_element_by_id("xx").send_keys(Keys.SPACE) 			# 空格键(Space)
driver.find_element_by_id("xx").send_keys(Keys.TAB) 			# 制表键(Tab)
driver.find_element_by_id("xx").send_keys(Keys.ESCAPE) 			# 回退键(Esc)
driver.find_element_by_id("xx").send_keys(Keys.ENTER) 			# 回车键(Enter)
driver.find_element_by_id("xx").send_keys(Keys.CONTROL,'a') 	# 全选(Ctrl+A)
driver.find_element_by_id("xx").send_keys(Keys.CONTROL,'c') 	# 复制(Ctrl+C)
driver.find_element_by_id("xx").send_keys(Keys.CONTROL,'x') 	# 剪切(Ctrl+X)
driver.find_element_by_id("xx").send_keys(Keys.CONTROL,'v') 	# 粘贴(Ctrl+V)

# 输入空格键+“python”
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
driver.find_element_by_id("kw").send_keys("python") 

 

6. 打印信息

title = driver.title 
url = driver.current_url 

通过获得页面的 title 、URL 地址,页面上的标识性信息(如,登录成功的“欢迎,xxx” 信息)来判断用例执行成功。

 

7. 设置等待时间

import time						# 导入time包 

driver.implicitly_wait(30) 		# 添加智能等待 
time.sleep(5)					# 添加固定休眠时间 


# 导入WebDriverWait 包 
from selenium.webdriver.support.ui import WebDriverWait 

# 详细格式如下:
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

driver - WebDriver 的驱动程序(Ie,Firefox,Chrome 或远程)
timeout - 最长超时时间,默认以秒为单位
poll_frequency- 休眠时间的间隔(步长)时间,默认为 0.5 秒
ignored_exceptions - 超时后的异常信息,默认情况下抛 NoSuchElementException 异常。


element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id(“someId”)) is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)). until_not(lambda x: x.find_element_by_id(“someId”).is_displayed()) 

 

8. 定位frame中的元素

driver.switch_to.frame("mainscreen")	# 切入到id="mainscreen"的嵌套中
driver.switch_to.default_content()		# 这句话是退出原来的嵌套回到原来的主文档
driver.switch_to.parent_frame()			# 返回上一级frame

 

9. 浏览器多窗口

# 获得当前窗口 
nowhandle=driver.current_window_handle

# 获得所有窗口
allhandles=driver.window_handles

for handle in allhandles:
    if handle != nowhandle: 
        driver.switch_to_window(handle) 	# 到最后窗口口
        driver.close()						# 关闭最后窗口

 

10. alert/confirm/prompt 处理

driver.switch_to_alert().text 				# 获取网页上的警告信息
driver.switch_to_alert().accept 			# 接收警告信息 
driver.switch_to_alert().dismiss 			# 取消对话框(如果有的话) 
driver.switch_to_alert().send_keys("xx") 	# 输入值(如果有的话) 

 

11. 下拉框处理

from selenium.webdriver.support.ui import Select
Select(driver.find_element_by_id('language')).select_by_value(Value)

 

12. 文件上传

driver.find_element_by_name("file").send_keys('D:\\selenium_use_case\upload _file.txt') #,send_keys()发送一个本地的文件路径。从而达 到上传文件的目的。

 

13. cookie消息处理

driver.get_cookies() 		# 获得所有cookie信息
driver.get_cookie(name)		# 返回特定 name 有 cookie 信息
driver.add_cookie({'name':'key-aaaaaaa', 'value':'value-bbbb'})		# 向cookie的name 和value添加会话信息。 
driver.delete_cookie("CookieName") 
driver.delete_cookie("CookieName") 	# 删除特定(部分)的 cookie 信息
driver.delete_all_cookies()			# 删除所有cookie 

 

 

参考推荐

Selenium2.0 Python 常用函数

WebDriver配置Firefox代理服务器

Python+Selenium2 搭建自动化测试环境

Python + Selenium + Firefox 使用代理 auth 的用户名密码授权

Python + Selenium + Chrome 使用代理 auth 的用户名密码授权

Selenium Webdriver 以代理proxy方式启动firefox,ie,chrome

Selenium 设置 webdriver 启动浏览器、设置profile、加载插件

Python + Selenium2 + Chrome 爬取网页