2017-06-19 3 views
0

Ich konnte @FindBy erfolgreich mit PageFactory verwenden, aber die Person, die mich ausbildet, besteht darauf, dass ich @FindBy immer noch verwenden kann, ohne PageFactory zu verwenden. Er zeigte mir seinen Code und auf den ersten Blick scheint es, dass er keine PageFactory benutzt. Ohne Verwendung von PageFactory erhalte ich jedoch immer die NullPointerException. Ich habe ihn gebeten, sich meinen Code anzuschauen und ... naja, er scheint nicht zu wissen, warum mein Code auch nicht funktioniert. Ich hoffe, ich könnte neue Augenpaare bekommen, um mich aufzuklären.Verwenden von @FindBy in Selen ohne PageFactory

Hier ist ein Ausschnitt aus meinem Code

public class BaseClass { 

public WebDriver driver; 
private String title; 
private Wait<WebDriver> wait; 

public BaseClass(WebDriver driver, String title) { 

    this.driver = driver; 
    this.title = title; 
    wait = new FluentWait<WebDriver>(driver).withTimeout(45, TimeUnit.SECONDS).pollingEvery(2, TimeUnit.SECONDS); 
} 
} 

//

public class Test extends BaseClass { 


public Test(WebDriver driver) { 
    super(driver, "Login page"); 

} 


@FindBy(name="j_password") 
public WebElement password; 

@FindBy(name="j_username") 
public WebElement username; 

public void startest() throws Exception { 
username.clear(); 
username.sendKeys(id); 
password.clear(); 
password.sendKeys(secret); } 
} 
+0

Ich glaube nicht, dass es eine Möglichkeit gibt, @FindBy ohne pagefactory zu verwenden – kushal

Antwort

1

Nein, Sie nicht ohne PageFactory verwenden können. Lesen Sie die folgenden Zeilen für eine ordnungsgemäße Erklärung:

Page Factory wird jede WebElement-Variable mit einem Verweis auf ein entsprechendes Element auf der aktuellen Webseite basierend auf definierten "Locators" initialisieren. Dies geschieht mithilfe von @FindBy-Annotationen.

Anmerkungen?

In Page Factory werden Annotationen verwendet, um WebElements beschreibende Namen zu geben, um die Lesbarkeit von Code zu verbessern. Und Annotation @FindBy wird verwendet, um Web-Elemente auf der Seite zu identifizieren.

Standardmäßig sucht PageFactory nach Elementen auf der Seite mit einem übereinstimmenden ID-Attribut. Wenn dies fehlschlägt, wird nach dem Attribut name gesucht. Aber wir brauchen mehr Kontrolle über das Identifizieren von Elementen in der HTML-Seite und deren Zuordnung zu unseren Seitenobjektfeldern.

Folgende Link hat mehr Details: http://www.seleniumeasy.com/selenium-tutorials/page-factory-pattern-in-selenium-webdriver

0

Ja, können Sie es ohne Selen ist PageFactory tun können, aber es bedeutet, dass Sie benötigen, um Ihre eigene Äquivalent davon umzusetzen.

Die PageFactory macht nichts Magisches um die Elemente zu erstellen/zu füllen. Es ist in Kraft, wie es einige der fortgeschritteneren Dinge wie Caching tut und nur zum Zeitpunkt der Elemente referenziert (was in der C# Implementierung durch die Verwendung eines RealProxy getan wird, nicht sicher von der Java-Entsprechung).

Eine weitere Option besteht darin, By Eigenschaften zu speichern und sie nach Bedarf zu bewerten.

Verwandte Themen