2016-10-16 6 views
1

私は、Serenity + cucumber + java + maven(> mvn archetype:generate -Dfilter net.serenity-bdd:serenity-cucumber)を使用してサンプルプロジェクトを作成しました。平静... Webdriverを入手するには?

それがFirefoxブラウザを立ち上げると、このウェブサイトに行くとき、私は見ることができます:

@DefaultUrl("http://en.wiktionary.org/wiki/Wiktionary") 

質問: この点から、「webdriverをドライバーが」作成されましたが、どのように私はを取得/取得することができますその "ドライバ"変数?私はdriver.getWindowHandle()を使用してウィンドウIDを取得しようとしています。

更新日:

@DefaultUrl("http://en.wiktionary.org/wiki/Wiktionary") 
public class DictionaryPage extends PageObject {...} 

私はのPageObjectスーパークラスを見上げると、この発見:

public abstract class PageObject extends net.serenitybdd.core.pages.PageObject { 

     protected PageObject() { 
     super(); 
    } 

    protected PageObject(WebDriver driver, Predicate<? super net.serenitybdd.core.pages.PageObject> callback) { 
     super(driver, callback); 
    } 

    public PageObject(WebDriver driver, int ajaxTimeout) { 
     super(driver, ajaxTimeout); 
    } 

    public PageObject(WebDriver driver) { 
     super(driver); 
    } 
} 

を..だからのPageObjectは、別のスーパークラスからwebdriverを変数を使用して文は以下のようにしています。この "web driver"変数に到達するために宣言する必要がある構文は何ですか? ありがとう ノウナダ ===========

JDelorean!

ありがとうございました。ここにコードがあります..「ドライバー」に何が間違っているのかを教えてください。

1 - フィーチャーファイル: 特集:アマゾンユーザーのログイン認証 シナリオ: 考えると、ユーザが「ホーム」ページ

2上にあるアマゾンユーザーのログイン認証 - ステップ定義ファイル: パッケージcom.XXXX.steps ; import net.thucydides.core.annotations.Steps; import com.XXXX.steps.serenity.User; import cucumber.api.java.en.Given;

class DefinitionSteps { 
    @Steps 
    User user; 

    @Given("^user is on the \"([^\"]*)\" page$") 
    public void user_is_on_the_Amazon_page(String pageName)throws Throwable{ 
     user.is_on_the_page(pageName); 
    } 
} 

3 - テストランナークラス パッケージcom.XXXX。

import cucumber.api.CucumberOptions; 
import net.serenitybdd.cucumber.CucumberWithSerenity; 
import org.junit.runner.RunWith; 

@RunWith(CucumberWithSerenity.class) 
@CucumberOptions(features="src/test/resources/features") 
public class DefinitionTestSuite { 

}

4 - 私は、ドライバをキャプチャすることはできませんよユーザークラス。このファイルの最後にコメントアウトされた行は動作しない行です。また、 "ドライバ"は元のドライバ "home.getDriver()"に設定されていたが、何らかの値が "ドライバ"に渡されたがドライバ "home.getDriver()"はうまく動作することに注意してください。

package com.XXXX.steps.serenity; 

import com.XXXX.pages.Home; 
import net.thucydides.core.annotations.Step; 
import net.thucydides.core.steps.ScenarioSteps; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 

public class User extends ScenarioSteps{ 

    Home home = new Home(); 
    WebDriver driver = home.getDriver(); 

    @Step 
    public void is_on_the_page(String pageName) throws Throwable { 
     home.open(); 

home.getDriver().findElement(By.xpath(home.homeElements.get("Hello. Sign in"))).click(); 
     // driver.findElement(By.xpath(".//*[@id='nav-link-yourAccount']/span[1]")).click(); 
    } 
} 
+0

これはドライバ管理に関連しています。別のを確認する[ここ](http://stackoverflow.com/questions/40130996/is-there-any-framework-which-supports-behaviour-driven-approch-bdd-for-seleniu) – user861594

答えて

0

PageObjectあなたはWebDriverの使用を必要とする場合は、使用すべきgetDriver()方法があります。

フレームワークで作業する場合は、Serenity BDD's Manualを調べることを強くお勧めします。あなたは、そこにあるほとんどの質問に対する答えを見つけ出すべきです。または、Serenity BDD Users Groupをチェックします。

+0

ありがとうございましたJDeloran私を導きますグループ。私はPageObjectのスーパークラスから 'getDriver()'を見つけました。次に、PageObjectのスーパークラスを拡張しているクラスでスーパードライブの 'WebDriver driver = getDriver()'を呼び出そうとしました。私は苦情は見ませんでした。次に、 'System.out.println(ドライバ値+"ドライバ ")でドライバの内容を見ようとしたときに、nullポインタ例外が発生しました.. hummmm –

+0

最初に' WebDriver'を初期化してください場所。 'PageObject'はその責任を負うものではありません。あなたの質問を編集し、 'driver'を初期化するコードを投稿してください。 – JDelorean

0

Serenity-BDD:Cucumberフレームワークでは、未知の理由がありますが、そのドライバをローカル変数に割り当てることはできません。 この割り当てステートメントWebDriver driver = getDriver();は、「ドライバー」ローカル変数にヌルポインターをもたらします。 私の推測では、フレームワークは、getDriver()を保護する必要があります。なぜなら、スナップショットとシナリオのステップに関するレポートを行う必要があるからです。 あなたはそれを持っています。単純にフレームワークのgetDriver()を使用し、pageクラスをbase/AbstractクラスPageObjectの拡張として宣言する限り、何の問題もなくページ間を移動することができます。 あなたのページクラスの例:

public void HomePage extends PageObject { 
} 

フレームワークのドライバが自動的にhomePageに取り付けられている。HomePage homePage;あなたはホームページのクラスをインスタンス化時。 エレメントをクリックしたいとします。

getDriver().findElement(By.xpath("locationOfTheTargetElement").click(); 
関連する問題