如何在 Java 中执行 Selenium 测试

Posted

技术标签:

【中文标题】如何在 Java 中执行 Selenium 测试【英文标题】:How to execute a Selenium test in Java 【发布时间】:2013-08-31 19:23:35 【问题描述】:

所以我使用 Selenium IDE 为我想要完成的一些自动化创建了一个测试用例。我希望能够为这种情况创建一些循环/流控制,所以我想我需要将它从 Selenium IDE 导出到 Java 之类的东西(我最熟悉 Java)。我导出到 Java/JUnit4/Web 驱动程序。我认为尝试通过 Eclipse 执行 java 文件效果最好,但如果有人知道更简单的事情,请告诉我。无论如何,我没有找到关于如何通过 Eclipse 执行这个 Java 的很好的解释。

我阅读的大部分内容都告诉我要确保我的构建路径库包含 Selenium 独立服务器。几乎所有我读到的东西都告诉我要使用 Selenium 遥控器。但是,我认为 RC 已经贬值了,我想知道是否有任何方法可以使它与我从 Selenium 下载的更新的 Web 驱动程序一起工作。此外,我读到的大部分内容都告诉我需要使用 public static void main(),这有点尴尬,因为我不知道如何更改导出的 selenium 给我的代码(显然我不能全部粘贴到main方法中)。

如果有人能指导我完成从 Selenium 到 Java 的导出到执行代码,我将永远欠你的债。

Selenium 给我的代码: 包 com.example.tests;

package com.rackspace;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class RackspaceContactAutomation 
   private WebDriver driver;
   private String baseUrl;
   private boolean acceptNextAlert = true;
   private StringBuffer verificationErrors = new StringBuffer();

   @Before
   public void setUp() throws Exception 
      driver = new FirefoxDriver();
      baseUrl = "https://cp.rackspace.com/Exchange/Mail/Contacts/List.aspx?selectedDomain=blahblahblah.com";
      driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
   

   @Test
   public void testContactAutomationJava() throws Exception 
      driver.get(baseUrl + "/Exchange/Mail/Contacts/List.aspx?selectedDomain=blahblahblah.com");
      driver.findElement(By.linkText("Mr. Man")).click();
      driver.findElement(By.linkText("Contact Information")).click();
      new Select(driver.findElement(By.id("PhoneNumberType"))).selectByVisibleText("Mobile");
      driver.findElement(By.id("MobilePhone")).sendKeys("999-999-9999");
      new Select(driver.findElement(By.id("PhoneNumberType"))).selectByVisibleText("Fax");
      driver.findElement(By.id("Fax")).sendKeys("999-999-9999");
      driver.findElement(By.cssSelector("button.primary")).click();
   

   @After
   public void tearDown() throws Exception 
      driver.quit();
      String verificationErrorString = verificationErrors.toString();
      if (!"".equals(verificationErrorString)) 
         fail(verificationErrorString);
      
   

   private boolean isElementPresent(By by) 
      try 
         driver.findElement(by);
         return true;
       catch (NoSuchElementException e) 
         return false;
      
   

   private boolean isAlertPresent() 
      try 
         driver.switchTo().alert();
         return true;
       catch (NoAlertPresentException e) 
         return false;
      
   

   private String closeAlertAndGetItsText() 
      try 
         Alert alert = driver.switchTo().alert();
         String alertText = alert.getText();
         if (acceptNextAlert) 
            alert.accept();
          else 
            alert.dismiss();
         
         return alertText;
       finally 
         acceptNextAlert = true;
      
   

这给了我 4 个错误(3 个用于注释,我可以删除,还有一个用于 tearDown() 方法中的 fail。这不是我非常关心的错误,我该怎么做代码实际执行了吗?

谢谢!

【问题讨论】:

正在为您解答——您能否展示从 Selenium IDE 导出的 Java 代码?这不是完全必要的,但它可能会帮助我让你的答案更清楚。 这是一个完整的 Java 代码文件。我不太确定我是否理解它的复杂之处?将 JUnit 下载并安装到您的项目中,它会处理它.... 像这样的文档:code.google.com/p/selenium/wiki/GettingStarted ...只需使用main 方法来避免添加额外的测试框架的“位”。就是这样。 我昨天刚刚为像你这样的人推出了一个不错的入门项目,以了解事情是如何运作的。 - github.com/ddavison/selenium-framework 我使用 jUnit 来实际执行测试。也许这会对它有所启发 您不关心错误吗?那么它们是什么确切错误? 好吧,老实说,这些错误为您提供了线索。一条线索表明您缺少拼图中的一个重要部分。您将测试导出为 JUnit 测试,但实际上并没有导入 JUnit。下面的答案显示了如何做到这一点。所以不,不要只是忽略这些错误。他们告诉你出了什么问题。 【参考方案1】:

在 Eclipse 中运行 Selenium Java 代码的一个好方法是将它们作为 JUnit 测试运行。

1. 在您的 Eclipse 中创建一个 Maven 项目。如果您以前没有这样做过,请参阅:

How to install/integrate Maven with Eclipse How to create a simple Maven project

2. 将以下依赖项添加到您的 pom.xml 文件中:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.7</version>
    <scope>test</scope>
</dependency>    
<dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>2.25.0</version>           
</dependency>    
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-firefox-driver</artifactId>
    <version>2.33.0</version>
</dependency> 
<dependency><groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-server</artifactId>
    <version>2.25.0</version>    
</dependency>

3. 将导出的 Java 文件复制到 Maven 项目中。

4. 将以下导入添加到文件中:

import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

5. 将 Java 文件作为 JUnit 测试运行,如下所示:

【讨论】:

如果我的回答中有任何不清楚的地方,请告诉我,我很乐意添加解释并进行相应更新。 您可能需要清理“您需要以将它们作为 jUnit 运行”的位,任何单元测试框架都可以工作。以 TestNG 为例。 已记录并更改。谢谢! @TJamesBoone 感谢您的帮助!我对 Maven 任何东西的想法完全陌生。我不想浪费你所有的时间,但如果你有一个可靠的链接来说明如何在 Eclipse 中制作一个 Maven 项目,那就太好了。即使它可以最好的 TestNG 或其他单元测试框架,我也会选择最简单的 @user2719370 我在答案中放了两个链接,一个用于在 Eclipse 中安装 maven,一个用于设置项目。 (第一个链接是我刚才对另一个问题所做的另一个答案,所以我有一些很好的链接。如果你觉得它有帮助,请点赞!)另外,如果还有其他问题,请告诉我,我很高兴提供帮助。【参考方案2】:

前面的答案都是合法的。但是要直接从 Eclipse 运行,您需要对代码进行一些修改。您不需要 public void main 来运行 junit 代码。因此,以下是使您能够复制代码并将其粘贴到 eclipse 中并作为 JUnit 测试运行的步骤:

    在eclipse中安装JUnit->帮助->eclipse市场->搜索JUnit并安装,重启eclipse。

    在eclipse中创建一个项目和一个新包,然后创建一个与你的selenium IDE导出代码同名的新类,删除包行以外的所有内容。

    将代码从 selenium IDE 复制并粘贴到该类,删除 package 行。

    在您的代码区域中单击鼠标右键并作为 JUnit 测试运行。

【讨论】:

【参考方案3】:

我将 selenium 转换为 j 单元测试的答案非常简单。

首先您需要在透视工作台中设置代码,通过单击工具栏中的 使用编辑器>转到显示的>然后按其中一个编辑器>您会看到 Java 编辑器或窗口编辑器等,这将转换您的代码。然后按回到班级并突出显示它,右键单击鼠标 并将其作为 Java 应用程序运行。您应该能够看到您的设计/和源代码。还有问题

【讨论】:

请考虑将您的答案格式化为更易读的格式。

以上是关于如何在 Java 中执行 Selenium 测试的主要内容,如果未能解决你的问题,请参考以下文章

使用 JAVA 在 selenium 中执行测试的屏幕记录

如何在 Eclipse 中使用 Selenium 将外部 .js 导入到我的 Java 测试中?

用java编写的Selenium测试可以在Play中执行吗

如何记录Selenium自动化测试过程中接口的调用信息

测试人员如何搭建Selenium-Grid2环境(参考Java)

如何使用 Selenium+Appium 和 java 测试随机值