上一讲我们介绍了如何部署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 = www.sxzhongrui.com()

driver.quit()

driver = www.sxzhongrui.com()

driver.quit()

// 文件www.sxzhongrui.com

import org.openqa.selenium.WebDriver;

import www.sxzhongrui.comDriver;

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.sxzhongrui.com'

dr.quit()

from time import sleep

from selenium import webdriver

driver = www.sxzhongrui.com()

driver.get('http://www.sxzhongrui.com')

driver.quit()

import org.openqa.selenium.WebDriver;

import www.sxzhongrui.comDriver;

public class OpenBrowser {

public static void main(String[] args) {

WebDriver driver = new ChromeDriver();

driver.get("http://www.sxzhongrui.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.sxzhongrui.com'

dr.get url

dr.find_element(link_text: '百科').click

puts 'correct' if dr.current_url == 'http://www.sxzhongrui.com/'

# -*- coding: utf-8 -*-

from selenium import webdriver

driver = www.sxzhongrui.com()

driver.get('http://www.sxzhongrui.com')

driver.find_element_by_link_text('百科').click()

if driver.current_url == 'http://www.sxzhongrui.com/': print 'correct'

driver.quit()

import org.openqa.selenium.WebDriver;

import www.sxzhongrui.comDriver;

public class OpenBrowser {

public static void main(String[] args) {

WebDriver driver = new ChromeDriver();

driver.get("http://www.sxzhongrui.com");

driver.findElement(By.linkText("百科")).click();

System.out.println(driver.getCurrentUrl());

if(driver.getCurrentUrl().equals("http://www.sxzhongrui.com/")){

System.out.println("correct");

}

driver.quit();

}

}

如何返回当前页面的title

这个功能的应用场景跟返回页面url的情形差不多。

require 'rubygems'

require 'selenium-webdriver'

dr = Selenium::WebDriver.for :chrome

url = 'http://www.sxzhongrui.com'

dr.get url

puts dr.title

dr.quit

from selenium import webdriver

driver = www.sxzhongrui.com()

driver.get('http://www.sxzhongrui.com')

print driver.title

driver.quit()

import org.openqa.selenium.WebDriver;

import www.sxzhongrui.comDriver;

public class OpenBrowser {

public static void main(String[] args) {

WebDriver driver = new ChromeDriver();

driver.get("http://www.sxzhongrui.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\www.sxzhongrui.com文件中。 该文件定义了Remote WebDriver类。该类是其他具体的driver,如Chrome WebDriver的父类,实现了大多数的公用方法。

java源码中,操作浏览器的方法主要封装在org\openqa\selenium\remote\www.sxzhongrui.com文件中。 该文件定义了RemoteWebDriver类。该类是其他具体的driver,如Chrome WebDriver的父类,实现了WebDriver和JavascriptExecutor接口。

接下来

这一节讨论了浏览器的简单操作,下一节我们将讨论如何在页面上执行js代码。