Selenium 小技巧之验证信息及多表单切换
01 验证信息的获取
在进行Web自动化测试中,用得最多的验证信息是几种类型:title、curent_url和text。
title
用于获取当前页面的标题。current_url
用于获取当前页面的URL。text
用于获取当前页面的文本信息。
import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com/')
print('Before Search ===================')
# 打印当前页面title
title = browser.title
print(f'title: {title}')
# 打印当前页面的URL
now_url = browser.current_url
print(f'URL: {now_url}')
browser.find_element_by_id("kw").send_keys("python selenium")
browser.find_element_by_id("su").click()
time.sleep(2)
print('After Search ===================')
# 再次打印当前页面title
title = browser.title
print(f'title: {title}')
# 再次打印当前页面的URL
now_url = browser.current_url
print(f'URL: {now_url}')
# 获取搜索结果条数
num = browser.find_element_by_class_name('nums').text
print(f'Search result: {num}')
time.sleep(2)
browser.quit()
执行结果如下:
Before Search ===================
title: 百度一下,你就知道
URL: https://www.baidu.com/
After Search ===================
title: python selenium_百度搜索
URL: https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=python%20selenium&rsv_pq=bcc765ea0018f61a&rsv_t=df41%2BQdaDrx2EI%2Fp7ccwMKMOaZVTwk7MEoCYVuDeKS90g5HucTlClQYVh%2Bk&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=15&rsv_sug1=1&rsv_sug7=100&inputT=227&rsv_sug4=227
Search result: 搜索工具
百度为您找到相关结果约7,230,000个
上述这些信息,看似无任何作用,但是两次搜索结果的差异,可以作为自动化的断言来使用。
02 多表单切换
在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素进行识别和定位,无法直接定位frame/iframe表单内嵌页面上的元素,这时就需要通过switch_to_frame()
方法将当前定位的主体切换为frame/iframe表单的内嵌页面。
这里以网易邮箱登录为例,登录框的结构如下所示:
我们现在通过switch_to_frame()
方法来切换表单。
import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.126.com/')
time.sleep(2)
login_frame = browser.find_element_by_css_selector('iframe[id^="x-URS-iframe"]')
browser.switch_to_frame(login_frame)
browser.find_element_by_name("email").send_keys("username")
browser.find_element_by_name("password").send_keys("password")
browser.find_element_by_id("dologin").click()
browser.switch_to_default_content()
time.sleep(2)
browser.quit()
switch_to_frame()
默认可以直接对表单的id属性或name属性传参,因而可以的对象。在这个例子中,表单的id属性后半部分的数字(1575892449002.7014)是随机变化的,在CSS定位方法中,可以通过^=
匹配id属性为以x-URS-iframe
开头的元素。最后,通过switch_to_default_content()
回到最外层的页面。