当前位置: 首页 > 知识库问答 >
问题:

Selenium 2 webdriver带有JUnit或TestNG for PageObject设计模式

江鹏
2023-03-14

对于Selenium 2 Webdriver的测试框架,我们正在尝试在Junit和TestNG之间进行选择。我们已经决定为此使用页面对象设计模式。

通过使用@BeforeSuite注释,我确信TestNG适合这种方法。我们已经描述了一个简单的例子。

  1. 访问谷歌页面

PageObjects:谷歌页面。登录页面主页

实际测试类。

public class firstTest {  

    private final WebDriver driver = new FirefoxDriver();  
    private final  String url = "www.google.com"
    String keyword = "gmail.com";
    GooglePage gPage ;
    LoginPage lPage ;


  @BeforeSuite(alwaysRun = true)
    public void testWorkFlow{
    driver.get(url);
    gPage = new GooglePage(driver);
    lPage= gPage.searchKeyword(keyword);
 }

    @Test  
    public void testLoginPageMsg() throws Exception {  
        assertTrue(lPage.contqains("A Google approach to email."));
     }  

    @Test  
    public void testHomePage() throws Exception {  
       HomePage hPage = loginPage.loginWith("abcdef", "ghijklmno");  
       String h1Msg = hPage.gteMsg();
       assertEquals("inbox", h1Msgx);
    }  

}  

页面对象

public class GooglePage {  

    private final WebDriver driver;  
      public GooglePage(WebDriver driver) {  
        super();  
        this.driver = driver;  
     }  

     public LoginPage searchKeyword(String keyword){
     driver.findElement(By.id("gbqfq")).sendKeys(keyword); 
     driver.findElement(By.id("submit")).submit(); 
     driver.findElement(By.linkText(keyword));

     return new LoginPage(driver);
     }
  }

登录页面-页面对象。

public class LoginPage {  
      private final WebDriver driver;

      public LoginPage(WebDriver driver) {  
        super();  
        this.driver = driver;  
     }  

    public HomePage loginWith(String username, String password) {  
          executeLogin(username, password);  
        return new HomePage(driver);  
    }  

    private void executeLogin(String username, String password) {  
          driver.findElement(By.id("username")).sendKeys(username);  
        driver.findElement(By.id("password")).sendKeys(password);  
        driver.findElement(By.id("submit")).submit();  
    }  
  }    

主页-页面对象

public class HomePage {  

    private final WebDriver driver;  

     public HomePage(WebDriver driver) {  
        super();  
        this.driver = driver;  
       }  

    public String getMsg() throws Exception{  
          return driver.findElement(By.id("h1")).getText();  
      }  
  }  

我的问题是:

  • 我怎么能有类似JUnit的东西呢

我知道最新的JUnit 4.11版本支持测试执行顺序。

“一系列工作流/交互(在实际测试之前)”方法的步骤也可以用@BeforeClass注释。

但是这个注释强制我的方法是静态的,然后@BeforeClass方法中的所有page对象都需要声明为静态的。

(上面的示例只是我想描述我的案例的一个例子。实际上,我有相当多的PageObject及其方法在断言它们之前在这个方法中被调用。)

希望我已经说清楚了。如果您对此有任何意见或反馈,我们将不胜感激。

谢谢

共有1个答案

华昕
2023-03-14
  • 我怎么能有类似JUnit的东西呢

1)澄清你的问题——用户交互是由selenium完成的,而不是testNG
2)
-http://junit.sourceforge.net/javadoc/org/junit/Assert.html
-断言vs. JUnit断言
3)导航也是由selenium完成的,而testNG或JUnit都不是

 类似资料:
  • 我正在编写一个junit测试用例来测试rest调用。 我试图嘲笑售票服务,它工作正常,但当我在REST服务调用中嘲笑它时。它不嘲笑。 我正在使用springboot,mongodb与REST。 有什么解决这个问题的建议吗? }

  • 我是UnitTesting和Cucumber的新手,今天我试图在Intelij和Eclipse中实现教程中的一个简单示例,当我尝试运行TestRunner.java时,我也遇到了同样的错误。 我的pom.xml: 文件。特征

  • 请参见以下Dao设计模式的组件: 数据访问对象模式或DAO模式用于将低级数据访问API或操作与高级业务服务分离。以下是数据访问对象模式的参与者。 数据访问对象接口——该接口定义了对模型对象执行的标准操作。 数据访问对象具体类-这个类实现上述接口。这个类负责从数据源获取数据,数据源可以是数据库/xml或任何其他存储机制。 模型对象或值对象——这个对象是简单的POJO,包含get/set方法,用于存储

  • 各大设计模式例子参考:CSDN专栏 . C++ 设计模式 系列博文 设计模式工程目录 单例模式 单例模式例子 抽象工厂模式 抽象工厂模式例子 适配器模式 适配器模式例子 桥接模式 桥接模式例子 观察者模式 观察者模式例子 设计模式的六大原则 单一职责原则(SRP,Single Responsibility Principle) 里氏替换原则(LSP,Liskov Substitution Prin

  • 一、概述 二、创建型 1. 单例(Singleton) 2. 简单工厂(Simple Factory) 3. 工厂方法(Factory Method) 4. 抽象工厂(Abstract Factory) 5. 生成器(Builder) 6. 原型模式(Prototype) 三、行为型 1. 责任链(Chain Of Responsibility) 2. 命令(Command) 3. 解释器(Int

  • 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 本教程将通过 Java 实例,一步一步向您讲解设计模式的概念。 现在开始学习设计模式! 谁适合阅读本教程? 无论您是新手,还是老手,本教程都值得一读。对于那些