13. WebDriver 设置

Eclipse 中设置

先决条件:

  1. 拥有有效的互联网连接。
  2. 在系统上下载并安装 Java SE Development Kit(JDK)。 (http://www.oracle.com/technetwork/java/javase/downloads/index.html
  3. 下载 Eclipse IDE。 不需要安装。 只需将所有内容提取到一个文件夹中,然后双击可执行文件即可。 (http://www.eclipse.org/downloads/

是时候按照 3 个步骤来设置环境了,

步骤 1:

转到 http://www.seleniumhq.org/download/ 。 在“Selenium Client & WebDriver 语言绑定”部分下,单击“Java”语言的下载链接。 (请注意,您看到的版本号可能与此处快照中的版本号不同,因为创建此文章时,最新的版本是 3.0.0-beta2。)

WebDriver Download

步骤 2:

  • 将下载的文件解压缩到系统上所需的位置。 切换到 Eclipse 并选择所需的工作空间目录。
  • 创建一个新的 Java 项目,如下所示:“文件 -> 新建 -> Java 项目”。 我已将项目命名为“WebDriver 测试”。

步骤 3:

  • 右键单击创建的项目。 选择“构建路径”->“配置构建路径…”
  • Set up in eclipse
  • 现在有两种方式 可以将外部 JAR 添加到我们的项目中。

方法 1:

  • 确保已选择“库”标签。 单击“添加外部 JAR …”按钮。 “JAR 选择”窗口将打开。 浏览至 seleniumhq.org 站点(Selenium 客户端和 WebDriver 语言绑定)中的文件的下载和提取位置。
  • 确保选择所有类型为“可执行 Jar 文件”的文件。 目前,我在“selenium-java-3.0.0-beta2”文件夹中有一个文件,在selenium-java-3.0.0-beta2\lib文件夹中有 16 个文件。
  • 点击“打开”,将它们添加到“库”标签中。
  • set up - adding jars

方法 2:

  • 当您出于各种目的添加大量外部 JAR 文件(例如 WebDriver,JUnit,Ant 等)时,这确实非常方便。如果遵循方法 1,则区分为每种目的添加的 JAR 可能会变得非常困难。 在方法 2 中,我们将相应地创建一个单独的文件夹和名称,以便于识别和记录文档。
  • 确保选择了“库”标签。 单击,添加库…->用户库->接下来。
  • set up - user library
  • 现在,单击“用户库…”,将打开一个新窗口。 单击,新建…->指定文件夹的名称->确定。
  • User library custom name
  • 单击“添加外部 JAR …”按钮。 “JAR 选择”窗口将打开。 浏览至 seleniumhq.org 站点(Selenium 客户端和 WebDriver 语言绑定)中的文件的下载和提取位置。
  • 确保选择所有类型为“可执行 Jar 文件”的文件。 目前,我在“selenium-java-3.0.0-beta2”文件夹中有一个文件,在selenium-java-3.0.0-beta2\lib文件夹中有 16 个文件。
  • 点击“打开”,将它们添加到“用户库”窗口下创建的文件夹中。 点击“确定”,现在您将在“添加库”窗口中看到带有复选框的用户库。 确保选中此复选框,然后单击“完成”。 创建的用户库将在项目属性窗口的“库”选项卡中提供所有添加的外部 JAR。
  • set up - jars
  • 单击“确定”按钮后,新添加的 JAR 将在“包资源管理器”窗格中的项目下显示。
  • Eclipse package explorer

注意(这只是告诉您做一个注释)

此设置可与 Selenium 2 版本完美配合(我已经使用了很长时间了,一切都很好)。 但是,如果您使用的是 Selenium 3 beta 版本(如上面的屏幕快照所示),则需要执行一些其他步骤。

  • 从“https://github.com/mozilla/geckodriver/releases”下载“geckodriver.exe”。
  • set up - gecko driver
  • 编写测试脚本时,请确保包括以下行(还要确保系统中的 Firefox 浏览器版本为 48+)
  • System.setProperty("webdriver.gecko.driver", "<path_to_geckodriver.exe>");
    

你猜怎么了?! 您已经准备就绪,很快我们将通过启动 Firefox 浏览器来创建和运行我们的第一个测试脚本。

启动 Firefox 的第一个测试脚本

事不宜迟,让我们开始使用 WebDriver 中的第一个测试脚本。 在我们根据上一篇文章(添加了 WebDriver JAR 文件)创建的同一项目下,我创建了一个名为com.blog.tests的新包。

  • 接下来,右键单击“包 -> 新建 -> 类”。
  • Test Script - Class Creation
  • 我将类命名为“HelloWorldFirefox.java”。 创建所有这些文件后,“包浏览器”窗格将如下所示
  • Test Script - Package Explorer
  • 我们将在第一个测试脚本中考虑的场景是:
    • 打开 Firefox 浏览器。
    • 导航到“https://www.google.com/
    • 将页面标题声明为“Google”。
    • 根据声明结果在控制台上显示一条消息。
    • 关闭浏览器。

注意我们有一整篇文章专门用于声明和验证。 由于第一个脚本的主要座右铭是查看 WebDriver 的工作原理,因此让我们使用简单的 if-else 语句来比较实际和预期的页面标题。

package com.blog.tests;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class HelloWorldFirefox {
    public static void main(String[] args) {
//Selenium version 3 beta releases require system property set up
System.setProperty("webdriver.gecko.driver", "E:\\Softwares\\
            Selenium\\geckodriver-v0.10.0-win64\\geckodriver.exe");
        //Create a new instance for the class FirefoxDriver
        //that implements WebDriver interface
        WebDriver driver = new FirefoxDriver();
        //Assign the URL to be invoked to a String variable
        String baseUrl = "https://www.google.com";
        String pageTitle = "";
        String expectedTitle = "Google";
        //Open baseUrl in Firefox browser window
        driver.get(baseUrl);
        //Get the page title and assign to a String variable
        pageTitle = driver.getTitle();
        //Check if obtained page title matches with the expected title
        //and print the console output accordingly
        if(pageTitle.equals(expectedTitle)){
            System.out.println("Hello World! Result is as expected.");
        }else{
            System.out.println("Hello World! Assertion failed!");
        }
        //Close the Firefox browser
        driver.quit();
    }
}

我知道外表令人生畏! 不过不用担心,我们将阐明所有这些代码,并找出其含义。 让我们逐行走下去,不遗余力。

代码实践:

1.系统属性设置。

System.setProperty("webdriver.gecko.driver", "E:\\Softwares\\Selenium\\
                           geckodriver-v0.10.0-win64\\geckodriver.exe");

Selenium 3 Beta 版本不像 Selenium 2 版本那样支持直接启动 Firefox。 因此,必须通过“webdriver.gecko.driver”系统属性设置驱动程序可执行文件“geckodriver.exe”的路径。 指定在系统中相应保存可执行文件的路径。

2.接下来,为了实例化 Firefox 浏览器,我们将必须导入两个包。

  • 键入“WebDriver driver = new FirefoxDriver();”后,在“WebDriver”和“FirefoxDriver()”下方会出现一条波浪线。 悬停时,蚀将建议所有可能的快速修复。 单击建议导入相应包的第一个修复程序。
  • test script - import packages
  • 以下包指定了 WebDriver 接口,该接口用于根据需要实例化新的浏览器窗口。
    import org.openqa.selenium.WebDriver
    
  • 注意 :我们不要 说,WebDriver* driver = new WebDriver();,因为WebDriver是一个接口,并且只包含已定义但未实现的空方法。 因此无法实例化。
  • FirefoxDriver是特定于 Firefox 浏览器的类。 它具有根据接口WebDriver定义和实现的方法。 因此,这可以实例化。
    import org.openqa.selenium.firefox.FirefoxDriver
    
  • 因此,以下声明有点像我们的甘道夫。 (不要告诉我您还没有阅读或观看“指环王”系列!!)SeleniumVille 历来最强大,最受尊敬的台词。 因为它为FirefoxDriver类创建了一个对象。 现在,根据WebDriver接口的约定,通过调用FirefoxDriver类中已经实现的方法,我们现在可以使用此对象(在这种情况下为“驱动程序”)自动执行 Firefox 浏览器上的各种操作。
    WebDriver driver = new FirefoxDriver();
    
  • 将启动的 Firefox 浏览器将具有默认配置文件。 它不会随 Firefox 实例一起加载任何扩展程序和插件,并且会在安全模式下运行。 如果您想了解有关 Firefox 配置文件的更多信息,请访问“https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data”。
  • 同样,对于其他浏览器(例如 Chrome,IE,Safari 等),我们按照WebDriver接口中指定的相同协定(即,实现接口中定义的方法)编写特定的类。 在下一篇文章中,我们将通过特定示例了解如何使用其他浏览器。

3.现在,声明String类型的必要变量。

  • String baseUrl = "https://www.google.com";
    String pageTitle = "";
    String expectedTitle = "Google";
    
  • 我猜很简单,自我解释。 我们只是声明String类型的变量并为其分配值。 baseUrl是我们希望在 Firefox 浏览器窗口中为测试场景调用的 URL。 目前,pageTitle保持为空,因为这将是我们将从浏览器中获取的实际值。 ExpectedTitle是将与实际值进行比较的期望值。

4.导航到 Google 页面。

  • driver.get(baseUrl);
    
  • 这是我们要做的第一件事。 “get”方法用于导航到指定的 URL。 在这种情况下为 https://www.google.com
  • 注意driver.navigate().to(baseUrl)也达到相同的结果。 试试看!

5.获取页面标题。

  • pageTitle = driver.getTitle();
    
  • 页面标题的实际值可以使用getTitle()方法获得。 然后将标题保存到变量pageTitle中,以供进一步声明。

6.比较页面标题并在控制台中显示结果。

  • if(pageTitle.equals(expectedTitle)){
       System.out.println("Hello World! Result is as expected.");
    }else{
       System.out.println("Hello World! Assertion failed!");
    }
    
  • 检查存储在pageTitle中的实际值是否等于辅助值的期望值。 System.out.println()打印指定的参数和换行符。 这里只是纯 Java!

7.关闭浏览器窗口。

  •  driver.quit();
    
  • quit()方法关闭所有浏览器窗口,并完全结束 WebDriver 会话。 这样可以避免在未正确清除任何相关文件的情况下可能发生的内存泄漏。
  • 注意driver.close()也可以使用。 不同之处在于,它将关闭当前关注的浏览器窗口。

让我们在这里休息一下,好好沉浸其中! 我们将在下一篇文章中执行此测试

执行测试

如果您无法执行并查看输出,那么逐行代码遍历有什么好处? 因此,不必再大惊小怪了,让我们运行代码!!Eclipse 使我们能够通过 3 种方式来完成相同的任务,

  • 方法 1 :单击 Eclipse 中的“运行”快捷方式图标。
  • 方法 2 :右键单击“类文件,运行方式 -> Java 应用”。
  • 方法 3 :使用组合键CTRL + F11

Test execution

散布一些视觉效果:

  • 执行我们的测试将打开一个新的 Firefox 浏览器窗口,并按照代码执行测试步骤。 如上面的屏幕快照所示,输出显示在控制台中。
  • WebDriver 系列的第一个 BrainBell 的时间:回忆! 您知道吗,在记住事物的过程中,我们甚至还添加了新的想法? 回忆是对大脑中散布的元素的动态重建-称之为创造性的重新想象。 您记得的越多,就越记得!
  • 因此,回想一下我们是如何为刚刚执行的拳头场景编写代码的,而您都可以尝试自己的一些简单场景。 如果您在旅途中遇到任何颠簸,请在评论部分给我大喊。

用于启动其他浏览器的代码示例

如果您只能使用 Selenium(即 Firefox)在一个浏览器中自动化测试,但您的 Web 应用也支持 Chrome 和 IE,该怎么办? 这意味着所有三个浏览器都需要测试! 如果是这种情况,那么 Selenium 就像把头埋在沙子里一样有用。哦,不要惊慌! 我们的统治冠军 WebDriver 在这里为我们提供帮助。 这是我们今天的主题。 让我们潜入吧!

  • 第 1 步 :首先! 让我们下载所需的可执行文件。 转到“www.seleniumhq.org/download”。
    • InternetExplorerDriver在“Internet Explorer 驱动程序服务器”部分下可用。
    • ChromeDriverOperaDriverSafariDriver位于“第三方浏览器驱动程序”部分下。
    • 在本文中,我们将仅讨论InternetExplorerDriverChromeDriver。 设置其他浏览器也应遵循类似的步骤。
    • Browser download
  • 步骤 2 :下载可执行文件后,解压缩并将它们保存在所需的路径中。 我在 Eclipse IDE 的项目中创建了一个名为“浏览器驱动程序”的文件夹(右键单击“包 -> 新建 -> 文件夹”),并复制了下载的文件以便于访问。
  • 步骤 3 :现在,让我们通过右键单击“包-> 新建 -> 类”并将它们命名为“HelloWorld_IE.java”,创建两个新类。 和“HelloWorld_Chrome.java”。
  • 包浏览器窗格现在如下所示,
  • Eclipse window

让我们考虑一个非常简单的情况,因为我们的主要目标是查看是否可以启动 IE 和 Chrome 浏览器,

  1. 根据测试用例打开 IE / Chrome 浏览器。
  2. 导航到“https://www.google.com/
  3. 在控制台中显示“Hello World消息。
  4. 关闭浏览器。

首先让我们看看“HelloWorld_IE.java”类的代码

package com.blog.tests;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
public class HelloWorld_IE {
    public static void main(String[] args){
        //System property set up
        System.setProperty("webdriver.ie.driver", "browser-   drivers\\IEDriverServer.exe");
        //Create a new instance for the class InternetExplorerDriver
        //that implements WebDriver interface
        WebDriver driver = new InternetExplorerDriver();
        //Assign the URL to be invoked to a String variable
        String baseUrl = "https://www.google.com";
        //Open baseUrl in IE browser window
        driver.get(baseUrl);
        //Print the message to console
        System.out.println("Hello World!");
        //Close the IE browser
        driver.quit();
    }
}

如果注意到的话,此代码与我们在上一篇文章“第一个测试脚本 – 通过启动 Firefox ”中看到的代码非常相似。

  • 这些其他浏览器需要设置系统属性,因为不支持直接启动该属性。
    System.setProperty("webdriver.ie.driver", "browser-drivers\\IEDriverServer.exe");
    
  • 要求驱动程序可执行文件“IEDriverServer.exe”的路径必须由“webdriver.ie.driver”系统属性设置。 指定在系统中相应保存可执行文件的路径。
  • 为了实例化 IE 浏览器,需要进行的另一项主要更改是,
    WebDriver driver = new InternetExplorerDriver();
    
  • 键入此语句后,“WebDriver”和“InternetExplorerDriver()”下方会出现一条波浪线。 悬停时,Eclipse将建议所有可能的快速修复。 单击建议导入相应包的第一个修复程序。
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.ie.InternetExplorerDriver;
    
  • 根据提供的注释,以下代码看起来很不言自明。 IE 浏览器启动后,它便导航到 Google 页面,将“Hello World”消息打印到控制台并关闭浏览器窗口。
  • 执行此测试后的控制台窗口如下所示,
  • Eclipse console
  • HelloWorld_Chrome.java 类的代码,
    package com.blog.tests;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    public class HelloWorld_Chrome {
        public static void main(String[] args) {
            // System property set up
            System.setProperty("webdriver.chrome.driver", "browser-drivers\\chromedriver.exe");
            // Create a new instance for the class ChromeDriver
            // that implements WebDriver interface
            WebDriver driver = new ChromeDriver();
            // Assign the URL to be invoked to a String variable
            String baseUrl = "https://www.google.com";
            // Open baseUrl in IE browser window
            driver.get(baseUrl);
            // Print the message to console
            System.out.println("Hello World!");
            // Close the IE browser
            driver.quit();
        }
    }
    

如果将此代码与“HelloWorld_IE.java”进行比较,则只有两个值得注意的变化。

  1. 系统属性设置
  2. ChromeDriver类实例化

因此,我们可以得出结论,通过指定相应的系统属性并提供准确的驱动程序类实例化,可以借助 WebDriver 轻松启动和自动化相应的浏览器。

  • 在执行 Chrome 浏览器的代码后,控制台窗口如下所示,
  • ConsoleOutput

我猜想,WebDriver 终于慢慢地在阳光下崭露头角了! 如果您在启动各种浏览器时遇到任何问题,欢迎大家在评论部分中表达自己的意见。

下一节:大家好! 带出隐藏在您体内的测试忍者,因为今天我们将为 JUnit 框架设置环境。