2012-04-11 1 views
0

Beide diese Tasten haben fast ähnliche ID (die Zahl auf der ID kann ändern und ist daher nicht zuverlässig) Beide haben die gleichen Klassen Sie beide unter die gleiche Mutter Mit Ausnahme der Spanne nichts andersBenötigen xpath zum Suchen von 2 Schaltflächen mit fast gleichen Eigenschaften für die Verwendung in Selen Automatisierung Skript

die alle Elemente der Benutzeroberfläche der Anwendung I Ereignisse zu lokalisieren und zu bauen versuche Selen ähnlich sind zur Verwendung an die unten Stück ...

Kann jemand bitte vorschlagen Wie kann ich diese Tasten bevorzugt mit Xpath finden?

<div id="button-1749" class="x-btn x-box-item x-toolbar-item x-btn-default-toolbar- small x-noicon x-btn-noicon x-btn-default-toolbar-small-noicon x-item-disabled x-disabled x-btn-disabled x-btn-default-toolbar-small-disabled" style="margin: 0pt; left: 1563px; top: 0px;"> 
<em id="button-1749-btnWrap" class=""> 
<button id="button-1749-btnEl" class="x-btn-center" autocomplete="off" role="button" hidefocus="true" type="button" aria-disabled="true" disabled=""> 
<span id="button-1749-btnInnerEl" class="x-btn-inner" style="">Delete Selected</span> 
<span id="button-1749-btnIconEl" class="x-btn-icon x-hide-display">&nbsp;</span> 
</button> 
</em> 
</div> 
<div id="button-1750" class="x-btn x-box-item x-toolbar-item x-btn-default-toolbar-small x-noicon x-btn-noicon x-btn-default-toolbar-small-noicon" style="margin: 0pt; left: 1654px; top: 0px;"> 
<em id="button-1750-btnWrap" class=""> 
<button id="button-1750-btnEl" class="x-btn-center" autocomplete="off" role="button" tabindex="1" hidefocus="true" type="button"> 
<span id="button-1750-btnInnerEl" class="x-btn-inner" style="">New Title</span> 
<span id="button-1750-btnIconEl" class="x-btn-icon x-hide-display">&nbsp;</span> 
</button> 
</em> 
</div> 
+0

ich XPath herausgefunden ich brauche. .. iss .. // button [enthält (@class, "x-btn-center")]/span [./ text() = 'Neuer Titel'] aber jetzt stecke ich wieder fest. Ich habe drei davon unter 3 verschiedenen Divs verschachtelt. Jetzt muss ich herausfinden, wie man Nachkommen eines bestimmten div (das hat eine eindeutige ID) – Adi

Antwort

0

Wenn Sie für die Elemente unter einem bestimmten div suchen möchten, können Sie descendent Achse verwenden.

Beispiel:

//div[@id='your div']/descendant::button[contains(@class, 'x-btn-center')]/span[text()='Delete Selected']"  

Dies wird Ihnen gewählte Taste Gelöschte, die mit id 'Ihre div' innerhalb des div ist.

+0

danke das ist nützlich. – Adi

0

Sie könnten auch GetElements (im Gegensatz zu GetElement) verwenden und dies wird eine Liste der Elemente zurück, die Ihre Suchkriterien entsprechen. Wenn Sie dann die Reihenfolge angeben, in der die Schaltflächen auf der Seite angezeigt werden, können Sie diese Liste verwenden, um jederzeit mit dem zugehörigen Index auf die gewünschte Schaltfläche zuzugreifen.

Eg.

ReadOnlyCollection<IWebElement> buttons = driver.FindElements(By.XPath("YOUR XPATH HERE")); 
//If it's the 3rd button that matches your criteria 
buttons[2].Click(); //or whatever you want with this button :) 
+0

Ich würde lieber Descendants verwenden, aber Ihre Idee ist auch gut. Danke für die Antwort. – Adi

0

Ich denke, dies in Ihrem Fall funktionieren sollte:

locator = driver.find_element_by_xpath("//div/em/button/span[contains(text(),'Delete Selected')]") 

Sie im Falle eines anderen Elements ähnlicher Weise tun können.

+0

Danke! Ich habe den xpath-Teil herausgefunden, als ich meinen ersten Beitrag kommentiert habe (// button [contains (@class, "x-btn-center")]/span [./ text() = 'Neuer Titel']). Das Problem, das ich hatte, war 3 Knöpfe im DOM Ich brauchte den Descendants Input, den Justin Ko über – Adi

0

obwohl XPath ein gewünschter Locator für Ihre Frage ist, gibt es dokumentierte Geschwindigkeitsunterschiede zwischen XPath und CSS-Selektor, hier ein Beispiel: http://saucelabs.com/blog/index.php/2011/05/why-css-locators-are-the-way-to-go-vs-xpath/. diese Elemente über CSS-Selektor, verwenden Sie die folgende, Python Beispiel

els = driver.find_elements_by_css_selector("button[id^=button] 
for eachel in els: 
    eachel.click() 
+0

gab Ich habe diesen Vergleich zwischen XPath und CSS gemacht und entschied mich für XPATH, da es stabiler und weniger wahrscheinlich ist ändern (zumindest in der Anwendung, die ich versuche zu automatisieren). Ich würde es vorziehen, dass die Tests zuverlässiger als schneller sind. Danke für den nützlichen Link und antworten. – Adi

+0

für mich, ist meine Locator-Methode zuverlässiger, da die Schaltflächen wahrscheinlich immer eine ID von Button [num] haben werden, XPaths sind spröde, als ob Sie ein weiteres Element in der Kette hinzufügen, es wird auch brechen –

0

Sie müssen suchen Sie Ihre eigenen XPath, wenn die XPath aus 2 Elementen schaffen gleich sind

driver.findElement(By.xpath("//span[contains(text),'New Title')]")).click; 
Verwandte Themen