Finden WebElements, best practices
In unserem aktuellen automation (mit Selenium/WebDriver/Java), verwenden wir @FindBy
sehr ausgiebig. Zum Beispiel:
@FindBy(css="a[name='bcrumb']") protected List<WebElement> breadCrumbLinks;
@FindBy(id="skuError") protected WebElement skuError;
@FindBy(className="reducedPrice") protected List<WebElement> reducedPrice;
@FindBy(partialLinkText="Injinji RUN 2.0") protected WebElement playButton;
@FindBy(linkText="annual member refund") protected WebElement annualMemberRefund;
@FindBy(xpath="//li[@itemprop='price']") protected WebElement productPrice;
Per definition @FindBy
finden Sie eine Auswahl über die folgenden: die Verwendung, id, name, className, css, tagName, linkText, partialLinkText und xpath.
Kürzlich, unsere front-end-devs vorgeschlagen, dass wir implementieren ein neues Attribut der Klasse, die beginnt mit " test='. Ich denke, das ist eine gute Idee, da könnten wir finden, WebElements, indem Sie nur auf der Suche nach, dass blurb der text, eher als die Werte, die @FindBy
inhärent verwendet. Meine Frage ist, wäre es besser zu Erweiterung der bestehenden Funktionalität von @FindBy
ODER erstellen Sie eine neue Art der Suche für die WebElements wir verwenden in unseren tests?
Du musst angemeldet sein, um einen Kommentar abzugeben.
First off, es gibt keine "beste Praktiken" nur diejenigen, die gut in Ihrem jeweiligen Kontext. Sorry, das ist ein Alter Kritikpunkt von mir...
Ich würde nicht verbringen die Mühe, die für die benutzerdefinierten Eigenschaften, sofern Sie nicht mit einem bestehenden Ansatz. Ich bevorzuge vorhandenen Locator (finden Logik), wo möglich.
Wann immer möglich, verwenden Sie ID-Attribute. Wenn die Seite ist gültiges HTML, dann IDs sind einzigartig auf der Seite. Sie sind außerordentlich schnell für die Auflösung in jedem browser, und die UI kann sich dramatisch ändern, aber dein Skript immer noch suchen Sie das element.
Manchmal IDs sind nicht die richtige Wahl. Dynamisch generierte IDs sind fast immer die falsch Wahl, wenn Sie arbeiten mit so etwas wie einem grid-Steuerelement. Setzen Sie auf eine id, die wird wahrscheinlich gebunden an die bestimmte Zeile positionieren und dann sind Sie geschraubt, wenn Ihre Zeilen-änderungen.
In einigen dieser Fälle Ihrer Entwickler, der Ihnen helfen kann durch anfügen oder voranstellen, Konstante Werte zu einer dynamisch generierten ID-Wert. ASP.NET Webforms stellt verrückte Sachen mit dynamisch erzeugten Werte, also ich habe ein suffix zu meinem Vorteil mehrfach.
Link-text, Namen-Attribut-Werte-und CSS-Selektoren (JQuery-style) sind die zweite große Möglichkeiten, wenn Sie nicht bekommen kann eine stabile, zuverlässige ID, oder man ist einfach nicht verfügbar.
XPath ist meine Letzte Wahl in fast allen Situationen. Es ist langsam, kann extrem spröde, und ist schwer zu behandeln, wenn es eine komplexe XPath. Das heißt, wenn Sie brauchen, um nach oben und unten die Seite DOM für Ihre locators, dann ist es die einzige Wahl.
Über die vorhandenen FindBy-Methoden bedeutet, dass Sie mit einem gut verstanden, gut unterstützt locator-Strategie. Das ist ein großer bonus, wenn Sie versuchen, herauszufinden, einen alten test, oder wenn onboarding jemand neues zu Ihrem team.
Das ist meine $0,02.
Ich denke, das wird helfen, Selen Locators Best Practices
Leckersten Locator:
ID
Name
Klasse
Link
Text oder Teilweisen Text
Lecker Locators
Index
XPath
Kind-Elemente
CSS-Eigenschaften
Essbare Locators
JS-Events
DOM-Elemente
Tastatureingaben
Koordinaten
Wenn ich dich richtig verstanden habe kannst du weiter verwenden @FindBy annotation mit css-Selektoren wie z.B. css = "[test='...']".