第 3 章 Selenium 与页面的交互
3.1 WebDriver 浏览器的属性
WebDriver 提供了很多属性来支持对浏览器的操作,例如,获取测试地址、多窗口的处理、获取浏览器名称等,具体介绍如下。
1.获取测试的地址
获取测试的地址用到的方法是 current_url,也就是获取当前测试的具体 URL。
以百度首页为例,获取的地址就是百度首页的地址,实现的测试代码如下:
#!/usr/bin/env python #-*-coding:utf-8-*- #author:wuya from selenium import webdriver driver=webdriver.Firefox() driver.maximize_window() driver.get('http://www.baidu.com') driver.implicitly_wait(30) print('测试地址为:{0}'.format(driver.current_url)) driver.quit() |
运行以上代码后获取的就是百度首页的地址。
2.获取当前页面代码
获取当前测试页面的代码用到的方法是 page_source。以百度首页为例,要想获取百度首页的页面代码,实现的代码如下:
#!/usr/bin/env python #-*-coding:utf-8-*- #author:wuya from selenium import webdriver driver=webdriver.Firefox() driver.maximize_window() driver.get('http://www.baidu.com') driver.implicitly_wait(30) print('页面代码如下:{0}'.format(driver.page_source)) driver.quit() |
3.获取当前的 Title
获取当前的 Title,即获取当前测试页面的标题。例如,百度首页的 Title 是"百度一下,你就知道"。获取 Title 的测试代码为:
#!/usr/bin/env python #-*-coding:utf-8-*- #author:wuya from selenium import webdriver driver=webdriver.Firefox() driver.maximize_window() driver.get('http://www.baidu.com') driver.implicitly_wait(30) print('百度首页的Title为:{0}'.format(driver.title)) driver.quit() |
4.页面的前进和后退
前进用到的方法是 forward,后退用到的方法是 back。以百度首页和 Bing 搜索首页为例,要实现先打开百度首页,再打开 Bing 搜索页,再后退到百度首页,然后再从百度首页返回到 Bing 搜索页。实现的测试代码为:
#!/usr/bin/env python #-*-coding:utf-8-*- #author:wuya from selenium import webdriver import time as t driver=webdriver.Firefox() driver.maximize_window() driver.get('http://www.baidu.com') t.sleep(2) driver.get('http://www.bing.com') t.sleep(2) #返回到百度 driver.back() print('当前URL为:{0}'.format(driver.current_url)) t.sleep(2) #前进到bing driver.forward() print('当前URL为:{0}'.format(driver.current_url)) driver.quit() |
5.关闭程序
在 Selenium 中,quit 方法用来退出驱动程序(Driver)并关闭执行的浏览器;而 close 方法用来关闭执行的浏览器,所以关闭程序建议使用 quit 方法。
6.加载测试地址
在 UI 自动化测试中,打开测试地址用到的方法是 get 方法,它的参数是要打开的测试页面的地址。例如,要测试打开新浪邮箱的地址(https://
mail.sina.com.cn/),测试代码如下:
#!/usr/bin/env python #-*-coding:utf-8-*- #author:wuya from selenium import webdriver driver=webdriver.Firefox() driver.maximize_window() driver.get('http://mail.sina.com.cn/') driver.quit() |
7.多窗口实战
在新浪邮箱的登录页面(简称新浪登录页面,或登录页面)点击"注册"按钮,如何在打开的注册页面输入框中输入注册信息呢?这里会用到窗口处理的方法。current_window_ handle 用来获取当前浏览器的窗口句柄,window_handles 用来获取浏览器的所有窗口句柄。要实现在新浪登录页面点击注册,在注册页面邮箱地址输入框中输入邮箱地址,再次跳转到登录页面,代码如下:
#!/usr/bin/env python #-*-coding:utf-8-*- #author:wuya from selenium import webdriver import time as t driver=webdriver.Firefox() driver.maximize_window() driver.get('http://mail.sina.com.cn/') driver.implicitly_wait(30) #获取当前窗口句柄 now_handle=driver.current_window_handle t.sleep(2) #点击注册链接 driver.find_element_by_link_text('注册').click() t.sleep(2) #获取所有窗口句柄 handles=driver.window_handles #对所有窗口句柄循环处理 for handle in handles: #判断handle不是当前窗口句柄 if handle!=now_handle: driver.switch_to_window(handle) t.sleep(2) driver.find_element_by_name('email').send_keys('wuya') t.sleep(2) # 关闭注册页面 driver.close() #切换到登录页面 driver.switch_to_window(now_handle) t.sleep(3) #在账号输入框中输入邮箱 driver.find_element_by_id('freename').send_keys('wuya') t.sleep(4) driver.quit() |
8.浏览器最大化
使浏览器 大化的方法是 maximize_window。一般打开浏览器时,界面并不是 大化的,这对 UI 自动化测试的影响比较大,所以建议在打开浏览器后,调用该方法让浏览器 大化,实现的测试代码如下:
#!/usr/bin/env python #-*-coding:utf-8-*- #author:wuya from selenium import webdriver driver=webdriver.Firefox() #浏览器 大化 driver.maximize_window() driver.get('http://www.baidu.com') driver.quit() |
9.刷新
刷新用到的方法是 refresh 方法。在 UI 自动化测试中,某些场景需要用到页面的刷新。例如,打开百度首页后,输入搜索关键字,然后刷新页面查看效果,实现的代码如下:
#!/usr/bin/env python #-*-coding:utf-8-*- #author:wuya from selenium import webdriver import time as t driver=webdriver.Firefox() driver.maximize_window() driver.get('http://www.baidu.com') driver.find_element_by_id('kw').send_keys('Selenium') t.sleep(2) #对页面进行刷新 driver.refresh() t.sleep(3) driver.quit() |
10.获取执行的浏览器
获取执行的浏览器名称用到的是 name 方法,实现的代码如下:
#!/usr/bin/env python #-*-coding:utf-8-*- #author:wuya from selenium import webdriver import time as t driver=webdriver.Firefox() driver.maximize_window() driver.get('http://www.baidu.com') #测试使用的浏览器 print('测试执行的浏览器为:{0}'.format(driver.name)) driver.quit() |
版权声明:51Testing软件测试网获得电子工业出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。