12

Selenium 1 を使用していますが、selenium2/webdriver に移行したいと考えています。正直なところ、selenium2/webdriver を使い始めるのは少し難しいと思います。本質的に、ページ オブジェクト間で作業する方法がわかりません。これが私の例です:

public class LoginPage {
    private final WebDriver driver;

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

    public void loginAs(String username, String password) {
        driver.get("http://url_to_my_webapp");        
        driver.findElement(By.id("username")).sendKeys(username);
        driver.findElement(By.id("pwd")).sendKeys(password);
        driver.findElement(By.className("button")).submit();                  
    }

    public static void main(String[] args){
        LoginPage login = new LoginPage(new FirefoxDriver());
        login.loginAs("user", "pass");
    }
}

現在、ユーザーがログインした後、別のページへのリダイレクトが発生します。私が理解している限りでは、現在のページを表す新しいページ オブジェクトを作成する必要があります。実際には、方法がわかりません。「hello world」レベルを超えた実用的な例はどこにありますか? この例をどのように続ける必要がありますか?

前もって感謝します!

4

2 に答える 2

9

これらのサイトは両方ともいくつかの例を示しています。

http://luizfar.wordpress.com/2010/09/29/page-objects/

http://www.wakaleo.com/blog/selenium-2-web-driver-the-land-where-page-objects-are-king

このページでは、PageFactoryを使用してページオブジェクトをサポートする方法について詳しく説明します: http ://code.google.com/p/selenium/wiki/PageFactory

各ページのクラスを作成することで、例を拡張してページオブジェクトを操作できます。例:

public class MainPage 
{ 
  private final WebDriver driver;  

  public MainPage(WebDriver driver) 
  {     
    this.driver = driver;  
  }   

  public void doSomething() 
  {      
    driver.findElement(By.id("something")).Click;     
  }
} 

loginAsを変更して、ログイン後にブラウザが移動するページを表すクラスを返します。

public MainPage loginAs(String username, String password) 
{       
    driver.get("http://url_to_my_webapp");             
    driver.findElement(By.id("username")).sendKeys(username);     
    driver.findElement(By.id("pwd")).sendKeys(password);     
    driver.findElement(By.className("button")).submit();
    // Add some error checking here for login failure
    return new MainPage(driver);                   
}
于 2011-04-07T08:31:19.773 に答える
5

この質問はかなり古いですが、それでも共有する価値があるのではないかと思いました。

通常、最初に必要なページオブジェクトクラスを作成します。次に、テストロジック用に別のクラスを作成します。このクラスには、クリックやその他のページ操作の「ユーザーワークフロー」を配置します。提供されているサンプルコードから、このクラスがmain()に置き換わると想定しています。これは、testNG / junit、テストアノテーション、dataProvidersなどを含めるクラスでもあります(厳密には必須ではありませんが、これらを使用する場合は注意が必要です)。このクラスでは、ページのクラスをインスタンス化できます。作成したwebdriverオブジェクトはページクラスではなくブラウザを制御するため、必要に応じて操作します

このようにすることで、テストワークフローを簡単に変更できます。また、実際のページが変更された場合や、新しいテスト要件がある場合は、ページオブジェクトを変更することもできます。

このメソッドの私のお気に入りの副作用は、ワークフローを持つクラスが、loginPage.Login()やloginPage.LoginSucceeded()などの呼び出しの下に隠された実際のテストの醜い詳細をすべて含むテストの非常に読みやすい「スクリプト」になる可能性があることです。そのため、カジュアルパスでは、ユーザークレデンシャルの検索、404 / 400の処理、ログインボタンの検索とクリックなどの詳細は表示されません。

于 2013-01-30T23:20:08.687 に答える