0

私はPageFactoryとセレンWebDriverでテストを書きたいが、私はクラスFindBy(webdriverを)が正しく

@FindBy(id="email") 
public WebElement mailLink; 

と使用法にPageFactory形式で注釈を追加する場合は動作しません:

mailLink.sendKeys("[email protected]"); 

毎回NullPointerExceptionが届きます。別の方法:

driver.findElement(By.id("email")).sendKeys("[email protected]"); 

正しい値を返します。最初の方法はどこに問題がありますか?

マイコード:ビジネス・ロジックと

public class FaceClass { 

protected WebDriver driver; 

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

public HomePage navigateToApp(){ 
    driver.navigate().to("https://facebook.pl"); 

    return PageFactory.initElements(driver, HomePage.class); 
} 

}

とクラス::私はFaceClassで、ドライバの初期化を持っている

public class HomePage extends FaceClass{ 

public HomePage(WebDriver driver) { 
    super(driver); 
    // TODO Auto-generated constructor stub 
} 


@FindBy(id="email") 
public WebElement mailLink; 

@FindBy(id="pass") 
public WebElement passLink; 

@FindBy(how = How.ID, using="u_0_n") 
public WebElement loginButton; 


public ProfilePage navigateToProfile(){ 

    try{ 

     if(driver.findElement(By.id("pass")).isEnabled() || driver.findElement(By.id("pass")).isDisplayed()){ 
      System.out.println("ok!"); 
     } 



    //driver.findElement(By.id("pass")).sendKeys("pass_to_account"); 
    //driver.findElement(By.id("email")).sendKeys("[email protected]"); 
    //driver.findElement(By.id("u_0_n")).click(); 
    mailLink.sendKeys("[email protected]"); 
    passLink.sendKeys("pass_to_account"); 
    loginButton.click(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
     } 

    return PageFactory.initElements(driver, ProfilePage.class); 
} 

}

とテスト:

public class ExampleTest { 

WebDriver driver; 

@Before 
public void setUp() throws Exception { 

    System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe"); 
    DesiredCapabilities capabilities=DesiredCapabilities.chrome(); 
    capabilities.setCapability("marionette", true); 
    driver = new ChromeDriver(); 
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
    driver.navigate().to("https://facebook.pl"); 
} 

@After 
public void tearDown() throws Exception { 

    driver.quit(); 
} 

@Test 
public void test() { 
    //fail("Not yet implemented"); 
    HomePage homepage = new HomePage(driver); 
    homepage.navigateToProfile(); 

} 

}

すべての要素が有効になっているとあなたが使用する前に、あなたの要素を初期化していない

+0

以前のケースでドライバを正しく初期化しましたか?コード部分を提供することができます。 –

答えて

1

見えます。ページ要素のPageFactoryメソッドinitElementsを初期化する。コンストラクタで次のように呼び出すと良いでしょう:

public HomePage(WebDriver driver) { 
    super(driver); 
    PageFactory.initElements(driver, this); 
} 

希望しています。