4.6获得验证消息
在执行用例时,得到的结果需要和预期结果比较,从而判断用户的通过或失败。自动化用例执行完后,还要从页面获取信息来证明用例执行是否成功。
通常用的最多的验证信息分别是:title,url,text。
#coding=utf-8
from
selenium
import
webdriver
import
time
url=
"http://bbs.u.360.cn"
driver=webdriver.Firefox()
driver.get(url)
#打印当前页面的title
title =driver.title
print
(title)
#打印当前页面的URL
now_url=driver.current_url
print
(now_url)
#执行登陆
driver.find_element_by_link_text(
"登录"
).click()
driver.find_element_by_css_selector(
".quc-input.quc-input-account"
).send_keys(username)
driver.find_element_by_css_selector(
".quc-input.quc-input-password"
).send_keys(password)
driver.find_element_by_css_selector(
'.quc-submit.quc-button.quc-button-sign-in'
).click()
driver.f
time.sleep(
5
)
print
(
'登录后'
)
#再次打印当前页面URL
now_url=driver.current_url
print
(now_url)
#获得登录的用户名
user=driver.find_element_by_id(
'zh_username'
).text
print
(user)
driver.quit()
4.7设置元素等待
由于很多web应用程序使用AJAX技术,在浏览器加载时,页面元素不是同时加载完成的。
所以定位元素时,设置元素等待来改善不稳定性。
webdriver提供了两种等待形式,显示等待和隐式等待。
4.7.1显示等待
显示等待使webdriver在等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常。
#coding=utf-8
from
selenium
import
webdriver
from
selenium.webdriver.common.by
import
By
from
selenium.webdriver.support.ui
import
WebDriverWait
from
selenium.webdriver.support
import
expected_conditions
as
EC
url=
"http://bbs.u.360.cn"
driver=webdriver.Firefox()
driver.get(url)
element=WebDriverWait(driver,
5
,
0.5
).until(
EC.presence_of_element_located((By.ID,
"key-words"
))
)
element.send_keys(
'selenium'
)
#driver.quit()
WebDriverWait类是由WibDriver提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在。超出设置时间检测不到就抛出异常。具体格式:
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_excptions=None)
说明: driver:浏览器驱动。 timeout:最长超时时间。poll_frequency:检查的时间间隔,默认为0.5s。 ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常。
WebDriverWait()一般由unit()和unit_not()配合使用
unit(method,message="")调用该方法提供的驱动程序作为一个参数,知道返回值为true。
unit_not(method,message="")调用该方法提供的驱动程序作为一个参数,知道返回值为false。
还可以使用is_displayed()来判断元素是否存在。
#coding=utf-8
from
selenium
import
webdriver
from
time
import
sleep,ctime
url=
"http://bbs.u.360.cn"
driver=webdriver.Firefox()
driver.get(url)
print
(ctime())
for
i
in
range
(
10
):
try
:
el =driver.find_element_by_css_selector(
"kw22"
)
if
el.is_displayed():
break
except
:
pass
sleep(
1
)
else
:
print
(
"time out"
)
driver.close()
print
(ctime())
4.7.2隐式等待
webdriver提供了implicitly_wait()方法来实现隐式等待,默认设置为0。
#coding=utf-8
from
selenium
import
webdriver
from
selenium.common.exceptions
import
NoSuchElementException
from
time
import
ctime
url=
"http://bbs.u.360.cn"
driver=webdriver.Firefox()
#设置隐式等待为10秒
driver.implicitly_wait(
10
)
driver.get(url)
try
:
print
(ctime())
driver.find_element_by_id(
"kw23"
).send_keys(
"selenium"
)
except
NoSuchElementException
as
e:
print
(e)
finally
:
print
(ctime())
driver.quit()
4.7.3sleep休眠方法
sleep()方法有Python的time模块提供。有时我们希望当脚本执行到某一位置时,要做固定的时间休眠,可以使用sleep方法。