簡體   English   中英

寧靜......如何獲得Webdriver?

[英]Serenity… how to get the Webdriver?

我剛剛使用 Serenity + Cucumber + java + maven ( > mvn archetype:generate -Dfilter net.serenity-bdd:serenity-cucumber) 創建了一個示例項目。

我可以看到它什么時候打開一個 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 變量。 我需要聲明什么語法才能獲得這個“網絡驅動程序”變量? 謝謝知道nada ==========================

JDelorean!

非常感謝您的幫助。 這是代碼..你能幫我指出“驅動程序”有什么問題嗎?

1 - 功能文件:功能:亞馬遜用戶登錄身份驗證場景:亞馬遜用戶登錄身份驗證給定用戶在“主頁”頁面上

2 - 步驟定義文件:包 com.XXXX.steps; 導入 net.thucydides.core.annotations.Steps; 導入 com.XXXX.steps.serenity.User; 進口黃瓜.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 - Test Runner 類包 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();
    } 
}

PageObject有一個getDriver()方法,如果您需要使用WebDriver ,您應該使用它。

如果您打算使用該框架,我強烈建議您閱讀Serenity BDD 的手冊 您應該在那里找到大多數問題的答案。 或者,檢查Serenity BDD 用戶組

由於某些未知原因,Serenity-BDD:Cucumber 框架不允許您將其驅動程序分配給您的局部變量。 這個賦值語句WebDriver driver = getDriver(); 將導致“驅動程序”局部變量中的空指針。 我的猜測是該框架需要保護它的getDriver()因為它需要報告快照和場景步驟。 所以你有它。 只需使用框架的getDriver() ,只要您將頁面類聲明為基類/抽象類 PageObject 的擴展,您就可以毫無問題地從一個頁面驅動到另一個頁面。 您的頁面類的示例:

public void HomePage extends PageObject {
}

在你實例化 HomePage 類HomePage homePage; 框架的驅動程序會自動附加到homePage 假設你想點擊一個元素,你只需聲明:

   getDriver().findElement(By.xpath("locationOfTheTargetElement").click();

這可以通過以下方式實現。

WebDriver driver = Serenity.getDriver();
driver.findElement(By.xpath....);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM