基于selenium的自动化测试脚本编写-python
2017-06-30 15:34
537 查看
浏览器操作
1 启动浏览器并打开网页
2 拖拽操作
3 弹窗处理
4 后退前进关闭
5 cookies操作
异常处理
1 等待
11 sleep函数
12 隐示例等待
13 使用javascript
14 显示等待
2 异常处理举例
21 点击页面元素
22 填写表单
23 等待窗口消失
页面元素操作
1 定位页面元素
11 id namexpath定位
12 定位超链接
13 tag name
14 class name定位
15 CSS Selectors
2 点击页面元素
3 填写表单
4 获取页面文本
5 滚动条
6 当前屏幕截图
7 模拟鼠标键盘事件
8 表格处理删除修改添加等
常用网址
基于selenium的自动化测试脚本编写
**ps.**webdriver会自动等待直到页面加载完成,但是如果页面采用了AJAX来更新的话,webdriver不能准确的判断加载完成的时间,这就会导致异常。
如果需要等待页面完全加载完成,请参考后续2.1 等待章节
返回当前打开的alert对象,确定,取消或者读取这个对象的操作等同于直接操作弹窗。
时间单位是秒
告诉WebDriver查询Dom一定时间。默认值是0,但是设置之后,这个时间将在WebDriver对象实例整个生命周期都起作用。
(这是一段java代码的demo)
只有满足显式等待的条件满足,测试代码才会继续向后执行后续的测试逻辑
如果超过设定的最大显式等待时间阈值,这测试程序会抛出异常。
显式等待可以自定义等待的条件,用于更加复杂的页面等待条件
下面列举了几个常用页面操作的异常处理:点击页面元素,填表单,等待页面出现(主要用于有弹窗的情况)
找不到元素的时候会返回
定位元素方式
关于xpath语法请参考:http://www.w3school.com.cn/xpath/xpath_syntax.asp
定位方式:
定位方式:
定位方式:
定位方式:
CSS Selectors语法:http://saucelabs.com/resources/articles/selenium-tips-css-selectors
滚动到页面底部
核心就是通过base xpath(指这个table的第n行第m列相同的部分)来获取表格的值。
下面的例子实现了判断data是否在表格中,在就返回行号,否则返回0
xpath语法:http://www.w3school.com.cn/xpath/xpath_syntax.asp
官方文档:http://selenium-python.readthedocs.io
CSS Selectors语法:http://saucelabs.com/resources/articles/selenium-tips-css-selectors
API:http://selenium-python.readthedocs.io/api.html
1 启动浏览器并打开网页
2 拖拽操作
3 弹窗处理
4 后退前进关闭
5 cookies操作
异常处理
1 等待
11 sleep函数
12 隐示例等待
13 使用javascript
14 显示等待
2 异常处理举例
21 点击页面元素
22 填写表单
23 等待窗口消失
页面元素操作
1 定位页面元素
11 id namexpath定位
12 定位超链接
13 tag name
14 class name定位
15 CSS Selectors
2 点击页面元素
3 填写表单
4 获取页面文本
5 滚动条
6 当前屏幕截图
7 模拟鼠标键盘事件
8 表格处理删除修改添加等
常用网址
基于selenium的自动化测试脚本编写
1 浏览器操作
1.1 启动浏览器并打开网页
from selenium import webdriver driver = webdriver.Chrome() #打开浏览器 driver.get("http://www.baidu.com") #访问url driver.maximize_window() #最大化窗口
**ps.**webdriver会自动等待直到页面加载完成,但是如果页面采用了AJAX来更新的话,webdriver不能准确的判断加载完成的时间,这就会导致异常。
如果需要等待页面完全加载完成,请参考后续2.1 等待章节
1.2 拖拽操作
这里指将一个页面元素移动到指定位置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()
1.3 弹窗处理
alert = driver.switch_to_alert()
返回当前打开的alert对象,确定,取消或者读取这个对象的操作等同于直接操作弹窗。
1.4 后退前进关闭
driver.forward() driver.back() driver.close() driver.refresh()
1.5 cookies操作
driver.get("http://www.example.com") #添加cookies cookie = {‘name’ : ‘foo’, ‘value’ : ‘bar’} driver.add_cookie(cookie) #获取cookies driver.get_cookies()
2 异常处理
很多时候页面加载的速度是赶不上我们代码的运行速度的,这就导致一个问题,在我们操作一个元素的时候可能该元素并没有加载出来。这样就会返回异常,严重影响代码的健壮性。2.1 等待
等待可以通过四种方式实现,通过等待并配合python的异常处理,可以保证代码的健壮性。2.1.1 sleep函数
调用Thread.sleep(),预估需要等待的时间。这是最简单的方式,但是灵活性并不好。时间单位是秒
import time time.sleep(7)
2.1.2 隐示例等待
隐示等待,隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉WebDriver查询Dom一定时间。默认值是0,但是设置之后,这个时间将在WebDriver对象实例整个生命周期都起作用。
(这是一段java代码的demo)
WebDriver dr = new FirefoxDriver(); dr.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
2.1.3 使用javascript
WebElement element = driver.findElement(By.xpath(test)); ((JavascriptExecutor)driver).executeScript("arguments[0].style.border="5px solid yellow"",element);
2.1.4 显示等待
显示等待,就是在超时时间内,每隔10ms去查询一次元素是否可以进行设定的操作。只有满足显式等待的条件满足,测试代码才会继续向后执行后续的测试逻辑
如果超过设定的最大显式等待时间阈值,这测试程序会抛出异常。
显式等待可以自定义等待的条件,用于更加复杂的页面等待条件
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, xpath)))
2.2 异常处理举例
异常处理就是首先判断要操作的元素时候出现了,然后再进行操作。下面列举了几个常用页面操作的异常处理:点击页面元素,填表单,等待页面出现(主要用于有弹窗的情况)
2.2.1 点击页面元素
# 点击页面元素 def waitandClick(xpath): try: WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, xpath))) #等待页面能够点击 except TimeoutException as e: #出现异常时候记录 print('Error:waitandClick, TimeoutException, xpath = %s\n' % xpath) log.writewebErrToLog('TimeoutException', xpath) else: driver.find_element_by_xpath(xpath).click()
2.2.2 填写表单
ps.填写表单的时候由于不能确定原来的输入框中时候有文字,所以填写之前要先清楚原来的值(调用clear()函数)# 填写表单 def waitandSendkeys(xpath, keys): try: WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath))) except TimeoutException as e: print('Error:waitandSendkeys, TimeoutException, xpath = %s\n' % xpath) log.writewebErrToLog('TimeoutException', xpath) else: driver.find_element_by_xpath(xpath).clear() driver.find_element_by_xpath(xpath).send_keys(keys)
2.2.3 等待窗口消失
def waitforDisappear(xpath): try: process = driver.find_element_by_xpath(xpath) WebDriverWait(driver, 20).until_not(lambda driver: process.is_displayed()) except NoSuchElementException as e: print('Error:waitforDisappear, NoSuchElementException, xpath = %s\n' % xpath) log.writewebErrToLog(< d468 span class="hljs-string">'NoSuchElementException', xpath) return False
3 页面元素操作
ps.页面上不可见的元素是不能操作的比如,处于页面底端的元素,被弹窗遮盖的元素3.1 定位页面元素
driver.find_element_by_id() driver.find_element_by_name() driver.find_element_by_xpath() driver.find_element_by_link_text() driver.find_element_by_partial_link_text() driver.find_element_by_tag_name() driver.find_element_by_class_name() driver.find_element_by_css_selector()
找不到元素的时候会返回
NoSuchElementException异常
3.1.1 id, name,xpath定位
<input type="text" name="passwd" id="passwd-id" />
定位元素方式
element = driver.find_element_by_id("passwd-id") element = driver.find_element_by_name("passwd") element = driver.find_element_by_xpath("//input[@id='passwd-id']")
关于xpath语法请参考:http://www.w3school.com.cn/xpath/xpath_syntax.asp
3.1.2 定位超链接
<html> <body> <p>Are you sure you want to do this?</p> <a href="continue.html">Continue</a> <a href="cancel.html">Cancel</a> </body> <html>
定位方式:
continue_link = driver.find_element_by_link_text('Continue') continue_link = driver.find_element_by_partial_link_text('Conti')
3.1.3 tag name
<html> <body> <h1>Welcome</h1> <p>Site content goes here.</p> </body> <html>
定位方式:
heading1 = driver.find_element_by_tag_name('h1')
3.1.4 class name定位
<html> <body> <p class="content">Site content goes here.</p> </body> <html>
定位方式:
content = driver.find_element_by_class_name('content')
3.1.5 CSS Selectors
<html> <body> <p class="content">Site content goes here.</p> </body> <html>
定位方式:
content = driver.find_element_by_css_selector('p.content')
CSS Selectors语法:http://saucelabs.com/resources/articles/selenium-tips-css-selectors
3.2 点击页面元素
driver.find_element_by_xpath('/html/body/form/div/div[2]/button').click()
3.3 填写表单
driver.find_element_by_xpath('//*[@id="admin_pwd"]').clear() driver.find_element_by_xpath('//*[@id="admin_pwd"]').send_keys(pwd)#input password
3.4 获取页面文本
driver.find_element_by_xpath(xpath).text
3.5 滚动条
参考文档:http://blog.varunin.com/2011/08/scrolling-on-pages-using-selenium.html滚动到页面底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
3.6 当前屏幕截图
from selenium import webdriver driver = webdriver.Firefox() driver.get('http://www.python.org/') driver.save_screenshot('screenshot.png') driver.quit()
3.7 模拟鼠标键盘事件
这是一个java实现的讲鼠标键盘的帖子:http://blog.csdn.net/lykangjia/article/details/46151611from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys driver.find_element_by_xpath('//*[@id="list1"]/li[11]/a').send_keys(Keys.DOWN)
3.8 表格处理(删除修改添加等)
讲解请参考:http://www.cnblogs.com/tobecrazy/p/4052069.html核心就是通过base xpath(指这个table的第n行第m列相同的部分)来获取表格的值。
下面的例子实现了判断data是否在表格中,在就返回行号,否则返回0
#参数说明: #baseXpath-指这个table的第n行第m列相同的部分 #tableXpath-要判断的表格的xpath #arrData-需要判断的是否存在的某行数据 def getElementInTable(tableXpath, baseXpath, arrData): table = driver.find_element_by_xpath(tableXpath) #table的总行数,包含标题 table_rows = len(table.find_elements_by_tag_name('tr')) #tabler的总列数 table_cols = len(arrData) - 1 flag = False for row in range(2,table_rows + 1): for col in xrange(1,table_cols + 1): xpath = '%s/tr[%d]/td[%d]' %(baseXpath, row, col) if arrData[col] == driver.find_element_by_xpath(xpath).text: if col == table_cols: flag = True else: break if flag == True: return row log.writeInfo('no such line:') for key in arrData: log.writeInfo('\t%s = %s\n' % (key, data[key])) return 0
4 常用网址
自动化测试脚本demo:https://github.com/niununu/k2p_web_testxpath语法:http://www.w3school.com.cn/xpath/xpath_syntax.asp
官方文档:http://selenium-python.readthedocs.io
CSS Selectors语法:http://saucelabs.com/resources/articles/selenium-tips-css-selectors
API:http://selenium-python.readthedocs.io/api.html
相关文章推荐
- python-day0003-搭建基于python的selenium自动化测试---第一个简单的测试脚本
- 基于Python+selenium+HTMLTestRunner简单的登陆脚本
- 基于python的selenium自动化测试环境安装
- 基于Selenium2与Python自动化测试环境搭建
- 用Python编写一个基于终端的实现翻译的脚本
- Monkeyrunner基于python编写脚本通用方法
- selenium+python脚本编写笔记(十四)
- 基于Python+selenium的自动化测试基础
- 怎样开始写第一个基于python的selenium脚本
- 【selenium】Selenium基于Python3的Web自动化测试脚本在IE上运行慢的解决方法
- Php安全编程&&python登录暴破脚本&&python自动化测试selenium
- 基于python+selenium的自动化测试,测试百度网盘Web端的登录功能【实战练习】
- 基于Selenium2与Python自动化测试环境搭建
- python-day0003-搭建基于python的selenium自动化测试---元素定位
- 基于Selenium2与Python自动化测试环境搭建
- 基于Selenium2 与Python自动化测试环境搭建
- selenium+python脚本编写笔记(十三)
- python+selenium 编写第一个自动化脚本 Ie版
- [置顶] Webdriver(selenium2)基于Python脚本实现登录填写日志(分步讲解)
- 基于python语言的selenium自动化测试(1)-环境搭建