『壹』 selenium之webdriver详解——小白进阶之路(二)
笔记:
01.设置元素等待时间
自动化测试的时候,元素定位没有错,但是跑脚本的时候却报错了
例如,登录的时候要等登录页面加载出来才能输入用户名和密码
selenium设置元素等待时间的3种方式及区别
1.sleep() --固定等待时间:强制等待,不能把握准确的等等时间,适合调试时用
2.implicitly_wait() --隐式等待时间:等页面加载完成才执行下一步操作,一般设置一次即可
3.WebDriverWait --显示等待时间:配合untill()和not untill()方法,根据判断条件 灵活处理等待时间
要先设置一个超长时间,在这个时间内,程序根据调用频率每隔几秒查看一下,如果条件满足,则执行下一步操作,若不满足且超过了等待时间则抛出异常
导包:from selenium.webdriver.support.ui import WebDriverWait
使用:WebDriverWait(driver, 超时时间, 调用频率, 要忽略的异常).until(要执行的方法, 超时时返回的错误信息)
实例:
replace:
02.键盘事件Keys类
制表符:send_keys(Keys.TAB)
退出键:send_keys(Keys.ESCAPE)
F1:send_keys(Keys.F1) f1~f12 以此类推
03.二次定位
顾名思义,通过多个元素,定位两次
dr.find_element(By.CLASS_NAME,"s_input").send_keys("python")
二次定位:
dr.find_element(By.NAME,"query").find_element(By.CLASS_NAME,"s_input").send_keys("python")
04.selenium鼠标悬停类-- ActionChains()
导包:from selenium.webdriver.common.action_chainsimport ActionChains
实例:将鼠标移动至更多设置,悬停鼠标
elem1= dr.find_element(By.LINK_TEXT,"设置")
ActionChains(dr).move_to_element(elem1).perform()
05.selenium警告框的处理
很多web应用经常会遇到javaScript编写的alert 、confirm 以及prompt 弹窗,需要用到switch_to.alert来切换弹窗,并对弹窗进行输入信息,关闭等处理。
switch_to.alert.text --获取弹窗文本信息
switch_to.alert.accept() --点击弹窗中确定按钮
switch_to.alert.dismiss() --点击弹出中取消按钮
switch_to.alert.sendKeys("字符串") --在弹窗中输入信息
实例:
06.下拉菜单选择的三种方式
导包:from selenium.webdriver.support.uiimport Select
#选择下拉框的o2
elem1 = dr.find_element(By.ID,"s3Id")
1:根据value值定位
Select(elem1).select_by_value("o2val")
2.根据index定位
Select(elem1).select_by_index(1)
3.根据下拉框文本信息定位
Select(elem1).select_by_visible_text("o2")
07.多窗口切换
window_handles --获取所有窗口句柄
switch_to.window(指定窗口) --切换到指定窗口
08.selenium之js操作浏览器滚动条位置
execute_script("window.scrollTo(0,n);")
09.selenium之JS操作隐藏元素
隐藏元素的标识:style="display:none;"
一般我们通过将隐藏元素的属性修改成显示再定位
10.操作excel文件
将测试数据参数化用到
10.1准备参数化数据文件
10.2导包
打开文件,填写文档路径
运行结果:
定位到sheet的位置
读取sheet的行和列的内容
#读取表的行的方法
rows = sheet1.nrows
print("行数",rows)
columns = sheet1.ncols
print("列数",columns)
读取指定行的值
#读取指定行的值
rowValue1 = sheet1.row_values(0)
print(rowValue1)
#读取指定列的值
colValue1 = sheet1.col_values(0)
print(colValue1)
#输出所有用户名和对应的密码
for iin range(1,rows):
print("用户名:" + sheet1.row_values(i)[0] +",密码:" + sheet1.row_values(i)[1])
『贰』 如何搭建Python3.4+Selenium
详细步骤:1.下载32位的python3.4,安装,注意在安装过程中,选择pip2.添加系统环境变量C:\Python34;C:\Python34\Scripts;C:\ProgramFiles\Google\Chrome\Application(后面会用到)3.使用pip命令,安装seleniumcdPython34然后输入:pipinstall-Uselenium安装成功后,显示:Runingsetup.-2.48.04.检测selenium是否安装成功。在Python的IDLE中,输入:fromseleniumimportwebdriver如果没有报错,则selenium安装成功。5.开始第一个程序=webdriver.Chrome()driver.get(“http://www..com“)driver.find_element_by_id(“kw”).send_keys(“自动化测试”)按F5运行,然后会自动打开网络网页。能够顺利安装,那是幸运的,但是时候,总因为各种原因导致安装过程不太顺利。下面将安装过程中遇到的问题,总结在此:issue1:使用pip命令安装结束后,加载selenium模块报错。fromseleniumimportwebdriver报错:File“pyshell#0”,line1,inimportseleniumFile“C:\Python34\selenium.py”,line1,:cannotimportname‘webdriver’Traceback(mostrecentcalllast):File“pyshell#0”,line1,inimportseleniumFile“C:\Python34\selenium.py”,line1,infromseleniumimportwebdriver网络了很多方法,仍无解。解决方法:最后换了版本,将64位python3.4改为32位的python3.4再次重新安装,成功。issue2:使用browser=webdriver.Chorme()报错。报错:Errormessage:“’chromedriver’”这是因为缺少驱动:Chromedriver.exe下载Chormedriver.exe注意安装Chromedriver.exe要与PC所安装的Chrome版本匹配。解决方法:下载安装ChromeDrvier.exe将ChromeDrvier.exe放到C:\Python34\Scripts\OVER
『叁』 selenium超全教程(4)-持续更新中
单选比较好操作,先定位需要单选的某个元素,然后点击一下即可。
多选好像也比较容易,依次定位需要选择的元素,点击即可。
下拉框的操作相对复杂一些,需要用到Select模块。
先导入该类
在select模块中有以下定位方法
测试页面
然后,再演示下拉框的不同选择的方式
Selenium打开一个页面之后,默认是在父页面进行操作,此时如果这个页面还有子页面,想要获取子页面的节点元素信息则需要切换到子页面进行擦走,这时候switch_to.frame()就来了。如果想回到父页面,用switch_to.parent_frame()即可。
既然是模拟浏览器操作,自然也就需要能模拟鼠标的一些操作了,这里需要导入ActionChains 类。
左键
这个其实就是页面交互操作中的点击click()操作。
右键
context_click()
在上述操作中
双击
double_click()
drag_and_drop(source,target)拖拽操作嘛,开始位置和结束位置需要被指定,这个常用于滑块类验证码的操作之类。
selenium中的Keys()类提供了大部分的键盘操作方法,通过send_keys()方法来模拟键盘上的按键。
引入Keys类
常见的键盘操作
send_keys(Keys.BACK_SPACE):删除键(BackSpace)
send_keys(Keys.SPACE):空格键(Space)
send_keys(Keys.TAB):制表键(TAB)
send_keys(Keys.ESCAPE):回退键(ESCAPE)
send_keys(Keys.ENTER):回车键(ENTER)
send_keys(Keys.CONTRL,'a'):全选(Ctrl+A)
send_keys(Keys.CONTRL,'c'):复制(Ctrl+C)
send_keys(Keys.CONTRL,'x'):剪切(Ctrl+X)
send_keys(Keys.CONTRL,'v'):粘贴(Ctrl+V)
send_keys(Keys.F1):键盘F1
send_keys(Keys.F12):键盘F12
实例操作演示:
定位需要操作的元素,然后操作即可!
如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候尝试在get方法执行完成时获取网页源代码可能并非浏览器完全加载完成的页面。所以,这种情况下需要设置延时等待一定时间,确保全部节点都加载出来。
等待有三种方式:强制等待、隐式等待和显式等待
1.强制等待
直接time.sleep(n)强制等待n秒,在执行get方法之后执行。
2.隐式等待
implicitly_wait()设置等待时间,如果到时间有元素节点没有加载出来,就会抛出异常。
3. 显式等待
设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就抛出一个超时异常。
WebDriverWait的参数说明:
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver: 浏览器驱动
timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
poll_frequency: 每次检测的间隔时间,默认是0.5秒
ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常
until(method,message='')
method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False
message: 如果超时,抛出TimeoutException,将message传入异常
until_not(method,message='')
until_not 与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。
其他等待条件
还有一些操作,比如下拉进度条,模拟javaScript,使用execute_script方法来实现。
在selenium使用过程中,还可以很方便对Cookie进行获取、添加与删除等操作。
输出:
『肆』 怎样开始写第一个基于python的selenium脚本
1、下载并安装python
2、安装selenium下载并解压缩selenium-2.32.0.tar.gz. 把selenium-2.32.0\py\下的selenium整个文件夹放入Python33\Lib\site-packages目录下。
3 下载Eclipse后安装pydev插件
4 打开eclipse创建pydev project,并添加一个Pydev Mole 输入一下代码
# coding=gbk
from selenium import webdriver
from selenium.webdriver.common import by
if __name__ == '__main__':
firefoxDriver=webdriver.Firefox()
firefoxDriver.get("http://www..com")
ele=firefoxDriver.find_element(by.By.ID,"kw")
ele.send_keys("hello")
5要想支持IE,下载IEDriverServer,解压缩之后,将exe程序放在安装python的根目录下。
6、运行过程中如果出现WebDriverException: Message: u'Unexpected error launching
Internet Explorer. Protected Mode settings are not the same for all
zones. Enable Protected Mode must be set to the same value (enabled or
disabled) for all zones.'
这个错误,更改IE的internet选项->安全,将Internet/本地Internet/受信任的站定/受限制的站点中的启用保护模式全部
去掉勾,或者全部勾上。下面是一个IE的例子,打开网络,自动搜索selenium。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Ie()
driver.get("xxx")
elem = driver.find_element_by_name("wd")
elem.send_keys("selenium")
elem.send_keys(Keys.RETURN)
完成上述步骤,你已经写了第一个基于python的selenium 脚本了
『伍』 Selenium webdriver常用属性和方法
属性 属性描述
driver.name 浏览器名称
driver.current_url 当前url
driver.title 当前页面标题
driver.page_source 当前页面源码
driver.current_window_handle 窗口句柄
driver.window_handles 当前窗口所有句柄
方法 方法描述
driver.back() 浏览器后退
driver.forward() 浏览器前进
driver.refresh() 浏览器刷新
driver.close() 关闭当前窗口
driver.quit() 退出浏览器
driver.switch_to.frame() 切换到frame
driver.switch_to.alert() 切换到alert
driver.switch_to.active_element() 切换到活动元素
源码:
from seleniumimport webdriver
from timeimport sleep
class Testcase(object):
def __init__(self):
self.driver = webdriver.Chrome()
self.driver.get('http://www..com')
self.driver.maximize_window()
def test_prop(self):
print(self.driver.name)#浏览器名称
print(self.driver.current_url)#url
print(self.driver.title)#网页的title
print(self.driver.window_handles)#句柄
print(self.driver.page_source)#查看源码
self.driver.quit()
def test_method(self):
self.driver.find_element_by_id('kw').send_keys('selenium')
self.driver.find_element_by_id('su').click()
sleep(2)
self.driver.back()#后退
sleep(2)
self.driver.refresh()#刷新
sleep(2)
self.driver.forward()#前进
self.driver.close()#只关闭当前tab
self.driver.quit()#关闭浏览器
def test_windows(self):
self.driver.find_element_by_link_text('新闻').click()
windows =self.driver.window_handles
while 1:
for win windows:
self.driver.switch_to.window(w)
sleep(2)
if __name__ =='__main__':
case = Testcase()
#case.test_prop()
#case.test_method()
case.test_windows()
『陆』 java怎么安装selenium
第1步:找到selenium 下载部分http://www.seleniumhq.org/download/,并通过点击它的版本号,如下图所示下载Selenium服务器。
第2步:下载后,我们需要启动Selenium服务器。这样做,打开命令提示符并导航到下载的JAR文件保持如下所示的文件夹。
第3步:启动服务器,使用命令“'java -jar <<downloaded jar name >>"如果已安装Java JDK正常,会得到一个成功的消息,如下图所示。现在,我们就可以开始写这将涉及在下一章Selenium RC的脚本。
配置Selenium的webdriver
现在,就让我们来看看如何配置Selenium webdriver。我们将了解如何开发在即将到来的章节,Selenium webdriver的剧本,但是现在我们明白它只是配置的一部分。
第1步:找到selenium 下载部分http://www.seleniumhq.org/download/和下载selenium 的webdriver通过点击它的版本号,如下图所示。
第2步:下载的文件是压缩格式,一个具有解压缩的内容映射到项目文件夹中。
步骤3:如下图所示,将解压缩后的内容将被显示。如何将其映射到项目文件夹,如何启动脚本会处理在webdriver的章节。
『柒』 如何在ubuntu中安装selenium2
Selenium是一个web自动化测试框架。用它可以实现web应用自动化测试。不过,我不只是用它来做测试,我还用它从电子商务网站签到页面爬取javascript生成的或AJAX的内容。
作为程序员,我不满足于使用Selenium
IDE来记录和重放宏记录。那样很蹩脚,而且不适合部署到多台服务器。这时,你需要Selenium
WebDriver,它又灵活,而且通过Selenium headless,运行Selenium在服务器上不需要显示设备。
为什么要运行Headless Selenium 测试?
当你希望能在服务器上运行的健壮的自动化操作,而其操作又依赖于
27X7,同时还希望它是稳定的,这时,Selenium是你唯一的选择。但是,Selenium需要运行在浏览器上。所以,你得骗Selenium,让
它觉得,它正跑在一台带有显示器的机器上。这样,你就可以不间断的跑自动化测试,同时又不失稳定性和扩展性。
如何在ubuntu上运行Selenium headless
本教程的目标是在使用Mozilla Firefox作为主浏览器的ubuntu上配置和运行selenium headless。
安装Firefox headless
确认你的ubuntu安装的是最新版本的Firefox。我遇到过Selenium的版本和Firefox的版本不兼容问题。如果你没有安装Firefox或者使用的是老版本的Firefox,可按以下步骤升级Firefox:
在/etc/apt/sources.list加入:
ppa:mozillateam/firefox-stable
运行以下命令升级或安装Firefox
sudo apt-get update
sudo apt-get install firefox
运行成功后,ubuntu上就应该安装好最新版本的Firefox了。
安装Xvfb——一个X虚拟框架
这个仿真框架使用虚拟内存能让X-Server运行在没有显示设备的机器上。这样,浏览器就可以运行了。在ubuntu和Debian上安装xvfb,只要运行:
sudo apt-get install xvfb
现在,可以运行xvfb服务上一个带有数字的显示设备上,这样是为了防止你在下阶段添加设备时引发冲突。本教程,我们分配一个显示设备 10..
sudo Xvfb :10 -ac
-ac代表关闭xvfb的访问控制。好了,服务器可以运行了。
启动浏览器
在你运行浏览器前,你首先要设置DISPLAY环境变量,以指定xvfb运行在哪个显示设备上。在加入环境变量前,我们检查一下所有的这些都如我们所料:
export DISPLAY=:10
firefox
如果终端(terminal)没有显示错误,就说明你已经成功运行Firefox在无显示设备的ubuntu上了。它会一直运行,直到你使用ctrl + C或其它类似方法来终止其运行。同时,它不会有任何输出。
如果你能成功运行以上的步骤,那么接下来的部分就是轻而易举了。现在,我们可以在ubuntu服务器上运行selenium,如同你在本地运行
一样。本教程的下一部分,我展示了如何运行一个独立selenium服务器,同时使用PHP的selenium webdriver去连接。
小结
很久以前,我也使用selenium做自动化的集成测试,使用HtmlUnit的webdriver,所以不需要显示器。但是HtmlUnit
的表现总是有些不如意。而最近在项目中发现这篇文章,解决我长久以来的问题:在没有显示器的服务器上运行Firefox的集成测试。
『捌』 selenium webdriver 怎么抓页面的js error
selenium webdriver的硬伤在于它无法真正判断页面上的元素什么时候能生成完毕,换句话说 ,假如获取页面上的元素失败,而这个元素是由js,ajax生成并且是未知的情况下(例如:要抓取网页关键词,但是关键词的内容是什么,一共有几个都是未知的情况下) 你无法判断是元素尚未被生成还是页面原本就没有这个元素导致的获取失败。
刚才说webdriver无法真正判断页面元素生成完毕,但webdriver提供了判断页面是否加载完成的方法,只不过这个加载完成的含义是页面上的html和JS代码加载完成,但js,ajax还可能在html和JS加载完之后执行从而改变页面上的内容,所以像刚才举例的网页上的关键词抓取失败就很难判断是js,ajax没有运行完毕还是页面上原本就没有这个元素导致的。
虽然selenium webdriver没有提供判断页面上的js,ajax是否执行完毕的功能,但不等于完全没有办法判断。官方也承认并不是不可以而是非常困难。昨天群里一位高手也说这种情况需要自行查看页面上的动态脚本代码以得知判断页面执行完的条件。我相信一个第三方库是比较难做到这一点的,即使牛逼到能实现,也不排除页面上有一个持续或者定时与服务器通信的动态脚本在实时改变页面内容,这样一来页面永远没有生成完毕的那一刻。
对于刚才说的抓取页面上未知元素,目前普遍的做法是在程序里面显示指定等待一段时间,确保有足够的时间让它生成,当然,不排除网络太差直到等待超时也来不及生成的情况。如果元素已知,可以显示用selenium webdriver提供的方法显示等待某一个元素在页面上出现后再继续执行下面的代码。