欢迎访问我的博客,你的支持,是我最大的动力!

web自动化测试框架selenium实践-python方式

HTML 小马奔腾 5214℃ 评论
目录:
[显示]

Selenium是一款用于web应用程序的测试框架。支持包括chromw、safari、firefox、ie等主流浏览器,可以驱动这些浏览器,完成预先设计的动作,从而实现自动化测试的目的。selenium支持多种语言开发,其中包括python。

官网:https://www.seleniumhq.org/

selenium python文档:
https://selenium-python.readthedocs.io/index.html 【英文】
https://selenium-python-zh.readthedocs.io/en/latest/index.html 【中文】

安装

通过selenium python的API,可以操作Selenium WebDriver的所有功能

安装
#windows
python -m pip install selenium
#linux
pip install selenium
或者easy_install selenium

selenium服务器

提供远程的WebDriver。下载地址:https://selenium-release.storage.googleapis.com/3.14/selenium-server-standalone-3.14.0.jar

运行方法
java -jar selenium-server-standalone-3.14.0.jar

quickstart

下载firefox的驱动:https://github.com/mozilla/geckodriver/releases/download/v0.21.0/geckodriver-v0.21.0-win64.zip

下载chrome的驱动:https://sites.google.com/a/chromium.org/chromedriver/downloads

https://chromedriver.storage.googleapis.com/2.41/chromedriver_win32.zip

python:https://www.python.org/ftp/python/3.7.0/python-3.7.0-amd64.exe

test.py

要运行该程序,需提前将chromedriver.exe和geckodriver.exe复制到test.py同级目录,或者直接放到C:\Windows目录下

selenium.webdriver模块提供所有WebDriver的实现,如firefox、chrome、ie、remote等
Keys类提供键盘按键支持,如return、f1、alt等

unittest的测试用例

使用远程Selenium WebDriver(Selenium Standalone)

将测试和浏览器进行分离,控制远程机器上的浏览器进行测试(所以,运行selenium server的机器需要安装有待测试的浏览器),测试端使用RemoteWebDriver驱动

启动远程webdriver
java -jar selenium-server-standalone-3.14.0.jar
#java -jar selenium-server-standalone-3.14.0.jar --help
#java -jar selenium-server-standalone-3.14.0.jar -timeout=20 -browserTimeout=60
14:48:30.202 INFO [GridLauncherV3.launch] - Selenium build info: version: '3.14.0', revision: 'aacccce0'
14:48:30.202 INFO [GridLauncherV3$1.launch] - Launching a standalone Selenium Server on port 4444
2018-09-05 14:48:30.690:INFO::main: Logging initialized @1410ms to org.seleniumhq.jetty9.util.log.StdErrLog
14:48:31.463 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 4444
console界面:http://192.168.31.99:4444/wd/hub/static/resource/hub.html

使用远程Remote的例子

desired_capabilities是一个字典,除了使用内置的,也可以自定义,如
desired_capabilities={"browserName": "chrome","version": "","platform": "ANY",}
desired_capabilities={"browserName": "firefox","marionette": True,"acceptInsecureCerts": True,}

页面交互

打开页面

driver.get("https://www.python.org")
#页面完全加载(onload方法执行完毕)后返回 若页面有大量ajax加载,需要使用waits方法
显示等待:wait = WebDriverWait(driver, 10)
隐式等待:driver.implicitly_wait(10)

与页面交互

获取元素
driver.find_element_by_class_name
driver.find_element_by_css_selector #p.content
driver.find_element_by_id
driver.find_element_by_link_text   #必须完全匹配
driver.find_element_by_name
driver.find_element_by_partial_link_text  #部分匹配就可以
driver.find_element_by_tag_name
driver.find_element_by_xpath #若匹配多项 仅返回第一个元素
#注意:若无匹配 会抛出selenium.common.exceptions.NoSushElementException异常
#每个方法都有find_elements_by_id方法,这会返回一个列表
输入文本
element.send_keys("hello world")
element.send_keys("hello world",Keys.RETURN)

填写表格

处理下拉框

其它方式

from selenium.webdriver.support.ui import Select
select = Select(driver.find_element_by_name('name'))
select.select_by_index(index)
select.select_by_visible_text("text")
select.select_by_value(value)
取消选择
select = Select(driver.find_element_by_id('id'))
select.deselect_all()
列出已选择的选项
select = Select(driver.find_element_by_xpath("xpath"))
all_selected_options = select.all_selected_options
获得所有选项
options=select.options
提交
driver.find_element_by_id("submit").click()
element.submit()

拖放

element = driver.find_element_by_name("source")
target = driver.find_element_by_name("target")
from selenium.webdriver import ActionChains
action_chains = ActionChains(driver)
action_chains.drag_and_drop(element, target).perform()

在不同窗口和框架之间移动,切换窗口

driver.swith_to_window("windowName")
#<a href="somewhere.html" target="windowName">Click here to open a new window</a>
使用窗口句柄
for handle in driver.window_handles:
driver.switch_to_window(handle)
在不同frame中切换
driver.switch_to_frame("frameName")
指定子frame
driver.switch_to_frame("frameName.0.child")
返回父frame
driver.switch_to_default_content()

弹出对话框处理

访问对话框
alert=driver.switch_to_alert()

访问浏览器历史记录

在浏览历史中前进和后退
driver.forward()
driver.back()

操作cookies

打开一个页面
driver.get("http://www.example.com")
设置cookie
cookie={'name':'foo','value':'bar'}
driver.add_cookie(cookie)
获取cookie
driver.get_cookies()
查找元素
from selenium.webdriver.common.by import By
driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')
By类的属性有ID,XPATH,LINK_TEXT,PARTIAL_LINK_TEXT,NAME,TAG_NAME,CLASS_NAME,CSS_SELECTOR
等待页面加载完成

针对使用ajax的页面,waits提供操作之间的时间间隔

显式:等待满足一定的条件再进一步执行

隐式:等待一定时间后再查找某元素

 

 

 

 

 

 

 

转载请注明:轻风博客 » web自动化测试框架selenium实践-python方式

喜欢 (0)or分享 (0)