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代码。

posted @ 2013-06-07 17:00  乙醇  阅读(4072)  评论(2编辑  收藏  举报

友情链接 虫师的blog  测试教程网  重定向科技  省略