首页
学习
活动
专区
圈层
工具
发布
20 篇文章
1
船长带你看书——《selenium2 python 自动化测试实战》(1)
2
船长带你看书——《selenium2 python 自动化测试实战》(2)
3
《selenium2 python 自动化测试实战》(3)——操作测试对象
4
《selenium2 python 自动化测试实战》(4)——鼠标事件
5
《selenium2 python 自动化测试实战》(5)——键盘事件
6
《selenium2 python 自动化测试实战》(6)——打印信息和设置等待时间
7
《selenium2 python 自动化测试实战》(7)——定位一组对象
8
《selenium2 python 自动化测试实战》(8)——定位iframe
9
《selenium2 python 自动化测试实战》(9)——切换窗口
10
《selenium2 python 自动化测试实战》(10)——下拉框和alert
11
《selenium2 python 自动化测试实战》(11)——selenium安装版本
12
《selenium2 python 自动化测试实战》(12)——跳过验证码登录add_cookie
13
《selenium2 python 自动化测试实战》(13)——上传文件
14
《selenium2 python 自动化测试实战》(14)——下载文件
15
《selenium2 python 自动化测试实战》(16)——js操作补充
16
《selenium2 python 自动化测试实战》(17)——几个cookies操作
17
《selenium2 python 自动化测试实战》(18)——自动化测试模型(一)
18
《selenium2 python 自动化测试实战》(18)——webdriver错误截图
19
《selenium2 python 自动化测试实战》(19)——Selenium工具介绍
20
《selenium2 python 自动化测试实战》(20)——unittest单元测试框架解析

《selenium2 python 自动化测试实战》(6)——打印信息和设置等待时间

打印信息经常用的有两个:

代码语言:javascript
代码运行次数:0
复制
# coding: utf-8

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
# 打印网页标题
title = driver.title
print title
# 打印当前url
curr = driver.current_url
print curr

打印显示为:

我们打印这些东西不是为了给自己看,而是为了做断言用,我们知道,自动化之所以叫自动化,就是中途不需要人为的操作,可是我们跳转网页怎么判断是不是跳转到正确的网页呢?当然就是网页的标题或者是url了,所以我们就可以把网站的title或者url拿出来,作为断言的内容了~

设置等待时间

实话实说,我只见过三个:

- 第一个,也是用的最多的:sleep();设置固定的休眠时间,括号里写多少秒就睡多少秒

- 第二个,implicitly_wait();它和sleep的区别就是sleep()是固定的,而implicitly_wait()是灵活的,举个例子:

代码语言:javascript
代码运行次数:0
复制
# coding: utf-8

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('disable-infobars')
driver = webdriver.Chrome(chrome_options=options)
print 1
driver.implicitly_wait(5)
print 2
driver.get("https://www.american.com")
print 3
driver.implicitly_wait(30)
print 4

从上面的例子可以看出,当加载网站的时候(因为你不访问外国网站上不去这个网站)会等待五秒,五秒过后才打印2,而下面等待30秒的地方根本没有等待,而是直接打印出来的,这就是网上你百度到的——隐式等待——

隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,我仍得等到页面全部完成才能执行下一步,我想等我要的元素出来之后就下一步怎么办?有办法,这就要看selenium提供的另一种等待方式——显性等待wait了。

需要特别说明的是:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。

- 第三个:WebDriverWait;显示等待,用法:

代码语言:javascript
代码运行次数:0
复制
from selenium.webdriver.support.wait import WebDriverWait

代码语言:javascript
代码运行次数:0
复制
WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)

上面的绿色字体是http://www.jb51.net/article/92672.html这里引用的原文。大家可以去这篇博客里看一下,说的已经很清楚了。船长这里再给大家解释一下until()里面要怎么写:

博客里说until(或者until_not)里面的内容是可调用的,也就是说我们直接写driver.find_element_by_xpath()是不可以的,因为这样定位到的是网页中的元素,它是不可调用的;我们可以换一种方式,按照书里面的:就是当你用until时就要求until里面的方法一定要返回True;用until_not时里面就要返回False;那么怎么样返回True或False呢?很简单,只需要加上一个判断条件,比如:

  • is_displayed() --是否展示
代码语言:javascript
代码运行次数:0
复制
WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).until(lambda x: x.find_element_by_id(“someId”).is_displayed())

  • title_is(u”xx”) —标题是否是xx
  • title_contains(“xx”) — 标题是否包含xx
  • visibility_of_element_located() —定位到的元素是否可见
  • presence_of_element_located() —元素是否被加到dom树里(该元素不一定可见)
  • text_to_be_present_in_element() —某个元素的text是否包含预期的字符串
  • element_to_be_clickable() —元素是否可见而且是enable的

方法好多,大家可以去expected_conditions方法里面看一下源码~~

另外再提醒大家看一下上面发的那篇博文,说的非常详细。如果你想知道应用的时候那个方法用的最多,那我直接告诉你——sleep...WebDriverWait之前也只是知道,但是从来没用过……一般来说大家公司的网速不会差到哪去,用sleep就够用了,当然如果你想让自己的代码高大上一点,用几个WebDriverWait也是不错的。而implicitly_wait()在整个代码里写一次就够了,其实也是挺方便的~~~我还是比较喜欢睡觉(sleep)~哈哈

下一篇
举报
领券