Python + Selenium 小技巧之验证信息及多表单切换

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()回到最外层的页面。


文章作者: &娴敲棋子&
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 &娴敲棋子& !
评论
  目录