2016-05-06 4 views
0

Ich habe derzeit einige Szenarien, in denen es unvermeidbar ist, XPath zum Suchen von Elementen zu verwenden. Eine der nicht so schönen Dinge, die das mit sich bringt, ist, dass mein Specflow-Gherkin-Code sehr unordentlich wird.Ordnungsgemäße Art, meine XPaths in SpecFlow zu verwenden

Zum Beispiel jetzt habe ich:

And User inserts 'testvan' into field with Xpath '//* [@id="content"]/div/div/div[1]/table/tbody/tr[3]/td[3]/div[1]/table/tbody/tr[5]/td[2]/input' 

ich dies hassen ehrlich zu sein. Gibt es eine Möglichkeit, ein Dataset in meinem SpecFlow zu erstellen und alle meine XPaths darin aufzunehmen, allen meinen XPaths einen bestimmten Namen zu geben und sie dann in meinen Szenarien zu verwenden?

Hoffe, du kannst helfen!

+0

in Java, im Allgemeinen werde ich Locators in Eigenschaften Datei mit Namen und ich werde diesen Namen nennen .. http://www.mkyong.com/java/java-properties-file-examples/ –

+1

Zwei Dinge .. a) Gurke zu verwenden bedeutet, Tests in verständlicher Sprache zu schreiben. Als das Schreiben von XPaths in Gherkin (was für mich die Verwendung von Gherkin zerstört), denke darüber nach, Schritte hinzuzufügen wie "Und der User fügt 'testvan' in das Feld 'Field_name'" ein. Sie können einen Hash beibehalten, um diese Parameter zu xpath oder einer anderen Form von Locator zuzuordnen. b) Wenn Sie xpath erstellen, versuchen Sie es mit '//' in der Mitte, anstatt die komplette Hierarchie zu schreiben. Das Schreiben einer vollständigen Hierarchie macht deinen Locator spröde. – Dileep17

+0

zum obigen Kommentar hinzufügen: 1) Verwendung von '// *' sollte möglichst vermieden werden, da sie die Leistung beeinträchtigen. In Ihrem Fall kennen Sie die ID des Elements, daher sollten Sie auch das Tag kennen (z. B. '// div [@id = ...]'); 2) Verwendung von Indizes entlang des Pfades macht Xpath fragil; Wie zuvor erwähnt, überspringe Elemente in der Mitte oder stelle ihre IDs/eindeutigen Eigenschaften zur Verfügung, anstatt Index; 3) das Element, das Sie wirklich interessieren, sollte wirklich identifiziert werden (durch Identifikation oder eine andere Eigenschaft). So könnte Ihr xpath aussehen wie '// div [@ id =" content "] // wählen Sie [@ some_prop = 'someval']' - plötzlich nicht so chaotisch? –

Antwort

1

Sie können dies in Ihrer Bindungsklasse lösen.

Erstellen Sie dort ein Wörterbuch und füllen Sie es vor. Verwenden Sie den Schlüssel des Wörterbuchs in Ihren Funktionen und suchen Sie im Wörterbuch nach.

Dictionary<string,string> _xpaths = new Dictionary<string,string>() {{ "XPaht1", "//* [@id=""content""]/div/div/div[1]/table/tbody/tr[3]/td[3]/div[1]/table/tbody/tr[5]/td[2]/input"}} 

[Given("And User inserts '(.*)' into field with Xpath '(*.')")] 
public void GivenXPath(string user, string xpathKey) 
{ 
    var xpath = _xpaths[xpathKey]; 
    ... 
} 
3

Es klingt wie Ihre Gherkin beschreibt, wie Dinge getan werden sollten, anstatt was getan werden sollte.

Ich denke, Sie möchten sich fragen, welche Aufgabe der Benutzer ausführt und diese beschreiben. Dies gibt Ihnen die Möglichkeit, Dinge wie hässlichen XPath in einer Support-Klasse, ein Seitenobjekt oder ähnliches zu Ihren Schritten zu verstecken.

Dadurch können Sie auf einer höheren Abstraktionsebene arbeiten und Ihre Gherkin weniger anfällig machen.

Verwandte Themen