2017-02-14 6 views
1

Ich habe zwei Schaltflächen in einer Seite/Form.Wie findet man ein Element durch ein Nicht-Null-Attribut und eine ID?

Sie sowohl den Klassennamen „Knopf regulation“

Einer von ihnen haben muss immer ein Attribut „deviceid“, die einen gewissen Wert hat, und einer von ihnen nie.

Wenn ich auf diese Schaltfläche in meinem Testskript beziehen, habe ich versucht, diesen CSS-Selektor

FindElement(By.CssSelector(".button.add.regulation")).Click(); 

verwendet, die funktionieren, wenn die erste Schaltfläche zu klicken versuchen, das nicht das zweite Attribut hat.

Aber wenn das Testskript das gleiche Code-Snippet trifft, wenn es auf die zweite Schaltfläche verweist (die denselben Klassennamen PLUS ein DeviceID-Attribut hat), schlägt es fehl, da das Element nicht sichtbar ist.

Wie verweisen wir auf diese zweite Schaltfläche, die einen Klassennamen mit einer anderen Schaltfläche teilt, aber ein sekundäres Attribut "DeviceID" hat?

+0

Welche anderen Attribute haben diese Tasten? Können Sie den HTML-Code für diese bereitstellen? – mrfreester

+0

@mrfreester Bitte sehen Sie meine Antwort unten, wenn Sie den Code benötigen – kevin

Antwort

2

Try Code unten und lassen Sie mich wissen, das Ergebnis:

FindElement(By.XPath("//button[@class='button add regulation' and @deviceid]")).Click(); 

Dies sollte

Taste mit deviceid Attribut übereinstimmen Wenn beide Tasten haben deviceid Attribut, während nur einer von ihnen nicht leer deviceid hat:

FindElement(By.XPath("//button[@class='button add regulation' and string-length(@deviceid)>0]")).Click(); 
+0

Hey @ Andersson danke für die Antwort, und Entschuldigung für meine späte Antwort. Bitte sehen Sie meine Antwort unten. – kevin

0

Richtige Implementierung.

Bitte beachten Sie die Verwendung von verschiedenen Variablennamen im Vergleich zum ursprünglichen Post/Frage.

Gegeben:

parentRow = applicationNumberLinks[rowIndex].FindElement(By.XPath("../../../.")); 
//ugly i know just bear with me 

wenn u die TDs innerhalb dieser Reihe finden möchten, die eine Klasse, wo der Name größer als 0:

cellsInRow = parentRow.FindElements(By.XPath(".//td[string-length(@class)>0]")); 

Zumindest ist es das, was funktioniert für was ich brauche. Bitte experimentieren Sie und modifizieren Sie für Ihren spezifischen Anwendungsfall

+0

Wenn Sie @anderssons Antwort nicht versucht haben, würde ich diesem einen Schuss geben. Es scheint so, als ob es zuverlässiger und klarer wäre, auf welchen Knopf du klickst. – mrfreester

Verwandte Themen