ruby/python/java全覆盖的Selenium-Webdriver系列教程(2)————浏览器的简单操作
上一讲我们介绍了如何部署selenium 2.0的开发环境,这一讲我们将介绍如何使用selenium提供给我们的接口进行浏览器的简单操作。
本文将先介绍适合初级用户的一些常用方法,然后将对一些高级用法和实现源码进行稍微深入一些的分析。
如何打开一个测试浏览器
做自动化测试一般情况下我们都需要首先打开测试浏览器,浏览器开启后我们方可”命令”浏览器去打开新页面,点击特定的链接,判断具体的逻辑等等。因此该操作为”万里长征的第一步”,必须给以重视。具体代码如下。需要注意的是如果使用chrome进行测试,那么必须下载安装chrome driver,如果是ie的话,目前必须下载ie driver,另外还需要注意ie的保护模式设置。具体细节参考这里。
require 'rubygems' # for ruby 187 only require 'selenium-webdriver' # 打开firefox dr = Selenium::WebDriver. for :firefox #dr = Selenium::WebDriver.for :ff dr.quit # 打开ie dr = Selenium::WebDriver. for :ie dr.quit #dr = Selenium::WebDriver.for :internet_explorer # 打开chrome dr = Selenium::WebDriver. for :chrome dr.quit |
from selenium import webdriver driver = webdriver.Firefox() driver.quit() driver = webdriver.Chrome() driver.quit() driver = webdriver.Ie() driver.quit() |
// 文件OpenBrowser.java import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.ie.InternetExplorerDriver; public class OpenBrowser { public static void main(String[] args) { WebDriver driver = new ChromeDriver(); driver.quit(); # 设置firefox的安装路径 System.setProperty( "webdriver.firefox.bin" , "D:\\Program Files\\Mozilla Firefox\\firefox.exe" ); WebDriver driver2 = new FirefoxDriver(); driver2.quit(); WebDriver driver3 = new InternetExplorerDriver(); driver3.quit(); } } |
如何访问1个具体的url
打开浏览器后我们需要转到我们的测试站点,也就是要访问1个url。下面的代码可以达成这个目的。
require 'rubygems' # for ruby 187 only require 'selenium-webdriver' dr = Selenium::WebDriver. for :chrome # 使用get方法 dr.get 'http://www.baidu.com' dr.quit() |
from time import sleep from selenium import webdriver driver = webdriver.Chrome() driver.get( 'http://www.baidu.com' ) driver.quit() |
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class OpenBrowser { public static void main(String[] args) { WebDriver driver = new ChromeDriver(); driver.get( "http://www.baidu.com" ); driver.quit(); } } |
如何关闭浏览器
测试结束后往往需要关闭浏览器,可以使用driver.quit()或者是driver.close()方法。
这两个方法的异同点是:
- quit可以关闭driver打开的所有浏览器窗口,而close只是关闭当前窗口;
- quit可以关闭与driver的连接,而close依然保留连接。如果你不能理解这个的话,你可以这样简单的认为quit的话会关闭掉driver,而close的不会。因此你使用close关闭了浏览器后,在某些情况下你可以看到仍然存在chromedriver或者iedriverserver进程。
如何返回当前页面的url
这个功能的典型应用场景是:点击一个链接,这时候浏览器跳转到新的页面。测试人员需要判断新页面的url以检查这个链接的跳转是否正确。
下面的代码演示了在百度首页点击"百科"这个链接,跳转到百度百科页面后判断该页面的url是否正确
# encoding: utf-8 require 'rubygems' # for ruby 187 only require 'selenium-webdriver' dr = Selenium::WebDriver. for :chrome url = 'http://www.baidu.com' dr.get url dr.find_element(link_text: '百科' ).click puts 'correct' if dr.current_url == 'http://baike.baidu.com/' |
# -*- coding: utf-8 -*- from selenium import webdriver driver = webdriver.Chrome() driver.get( 'http://www.baidu.com' ) driver.find_element_by_link_text( '百科' ).click() if driver.current_url = = 'http://baike.baidu.com/' : print 'correct' driver.quit() |
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class OpenBrowser { public static void main(String[] args) { WebDriver driver = new ChromeDriver(); driver.get( "http://www.baidu.com" ); driver.findElement(By.linkText( "百科" )).click(); System.out.println(driver.getCurrentUrl()); if (driver.getCurrentUrl().equals( "http://baike.baidu.com/" )){ System.out.println( "correct" ); } driver.quit(); } } |
如何返回当前页面的title
这个功能的应用场景跟返回页面url的情形差不多。
require 'rubygems' require 'selenium-webdriver' dr = Selenium::WebDriver. for :chrome url = 'http://www.qq.com' dr.get url puts dr.title dr.quit |
from selenium import webdriver driver = webdriver.Chrome() driver.get( 'http://www.qq.com' ) print driver.title driver.quit() |
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class OpenBrowser { public static void main(String[] args) { WebDriver driver = new ChromeDriver(); driver.get( "http://www.baidu.com" ); driver.findElement(By.linkText( "百科" )).click(); System.out.println(driver.getTitle()); driver.quit(); } } |
其他方法或属性
在这里仅仅讨论一些简单的属性和方法,更加复杂的方法会在后面慢慢讨论。
ruby
- window_handles : 返回当前所有打开浏览器的窗口句柄
- window_handle : 返回当前的浏览器的窗口句柄
- page_source : 返回当前页面的源码
- visible? : 当前浏览器是否可见,并不保证支持所有浏览器
python
- window_handles : 返回当前所有打开浏览器的窗口句柄.注意,这是属性,不是方法;
- current_window_handle : 返回当前的浏览器的窗口句柄.注意,这是属性,不是方法;
- page_source : 返回当前页面的源码.注意,这是属性,不是方法;
- name : 返回当前浏览器的名称.注意,这是属性,不是方法;
java
- getWindowHandles() : 返回当前所有打开浏览器的窗口句柄
- getWindowHandle() : 返回当前的浏览器的窗口句柄
- getPageSource() : 返回当前页面的源码
深入讨论
ruby 源码中,操作浏览器的方法主要封装在lib\selenium\webdriver\common\driver.rb文件中。 该文件定义了Selenium::WebDriver::Driver类。我们启动浏览器就是调用这个类的for方法。
python源码中,操作浏览器的方法主要封装在selenium\webdriver\remote\webdriver.py文件中。 该文件定义了Remote WebDriver类。该类是其他具体的driver,如Chrome WebDriver的父类,实现了大多数的公用方法。
java源码中,操作浏览器的方法主要封装在org\openqa\selenium\remote\RemoteWebDriver.java文件中。 该文件定义了RemoteWebDriver类。该类是其他具体的driver,如Chrome WebDriver的父类,实现了WebDriver和JavascriptExecutor接口。
接下来
这一节讨论了浏览器的简单操作,下一节我们将讨论如何在页面上执行js代码。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步