0

Ich mag Tests in Selen schreiben WebDriver mit PageFactory, aber wenn ich Annotationen in PageFactory Form in der KlasseFindBy in pageFactory (WebDriver) funktioniert nicht richtig

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

und Nutzung:

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

Ich bekomme ein NullPointerException jedes Mal. Ein anderer Weg:

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

gibt den korrekten Wert zurück. Wo ist das Problem mit der ersten Methode?

Mein Code:

I Treiberinitialisierung in FaceClass bekommen haben:

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); 
} 

}

und Klasse mit Business-Logik:

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); 
} 

}

und Test:

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(); 

} 

}

Alle Elemente werden aktiviert und sichtbar

+0

Haben Sie Ihren Treiber im früheren Fall richtig initialisiert? Sie können Ihren Code-Teil bereitstellen. –

Antwort

1

Sie haben Ihre Elemente nicht initialisiert werden, bevor Sie. So initialisieren Sie Ihre Seitenelemente PageFactory-Methode initElements. Es ist besser, wenn Sie es in Ihrem Konstruktor wie folgt aufrufen:

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

Ich hoffe, es funktioniert.

Verwandte Themen