2017-02-21 1 views
0

Ich versuche das Muster "Seitenobjekte" in meinen UI-Tests zu verwenden. In vielen Beispielen wird By (Locator) in Klassenfeldern gespeichert. Other empfiehlt, WebElement (oder SelenideElement, wenn Sie Selenide verwenden) zu speichern. Obwohl beide für fest codierte Locators geeignet sind, sehe ich nicht, wie man dies für Locators verwendet, wo der Pfad Variablen enthält.Was ist der richtige Weg zu Vorlage Locators in Selenide/Selen?

Zum Beispiel, wie in diesem Feld zu speichern Locator?

public SelenideElement getTotal(String type) { 
    return $(By.xpath("//h4[contains(text(), '"+ type +"')]"); 
} 

Antwort

1

Ihre Lösung ist meiner Meinung nach die richtige.

Normalerweise lege ich sie oben in mein PageObject neben den anderen Selektoren wie das, was Sie getan haben. Verwenden Sie einfach die Methode, wie Sie eines Ihrer SelenideElement Felder verwenden würden. Etwas wie:

private SelenideElement getTotalElementByType(String type) { 
    return $(By.xpath("//h4[contains(text(), '"+ type +"')]"); 
} 

Ich würde es private oder protected obwohl machen, denn mit der Seite Objekt Pattern Ihre Testskripts sollten nicht über die WebElements auf einer Seite Objekt kennen.

Ihre öffentlich zugängliche Methode wäre so etwas wie dieses:

public int getTotalByType(String type) { 
    string totalString = getTotalElementByType(type).getText(); 
    int total = //convert to int or whatever 
    return total; 
} 

Wenn Sie mit dem Element zur Interaktion wollte stattdessen Werte zu bekommen, würden Sie geben die Pageobject Sie erwarten, dass die zu anstatt zu gehen, zu folgen POP-Muster. :)

0

Sie müssen Locators tatsächlich nicht im Klassenfeld speichern. Page Object muss nicht unbedingt alle Elemente in Klassenfeldern deklarieren. Das Seitenobjekt ist ein OBJEKT, was bedeutet, dass es Methoden zur Manipulation mit ihm bereitstellen muss.

Also, Ihre Lösung ist einfach ideal. :)

Verwandte Themen