ruby/python/java全覆盖的Selenium-Webdriver系列教程(2)————浏览器的简单操作


本文将先介绍适合初级用户的一些常用方法,然后将对一些高级用法和实现源码进行稍微深入一些的分析。

如何打开一个测试浏览器
做自动化测试一般情况下我们都需要首先打开测试浏览器,浏览器开启后我们方可”命令”浏览器去打开新页面,点击特定的链接,判断具体的逻辑等等。因此该操作为”万里长征的第一步”,必须给以重视。具体代码如下。需要注意的是如果使用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接口。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值