2016-11-03 6 views
1

Ich versuche, ein Element aus einer Liste auszuwählen, die Felder bei einem Klick außerhalb der Liste aktualisiert werden. Der Code unten funktioniert, wenn ich nur ein EreignisKlicken außerhalb eines Elements funktioniert nicht

Actions action = new Actions(driver); 
EventGrid.FindElement(By.XPath("//div[contains(.,'" + nameToBeClicked + "')]")).Click(); 
// Forces a click outside element to fire the triggers 
EventGrid.FindElement(By.XPath("//html")).Click(); 
haben (siehe Bild)

Notice only one event under the name catgory

Aber nicht, wenn ich zwei Ereignisse haben (Hinweis gibt es zwei Ereignisse im Bild nun, ein neues Ereignis und das andere nannte Frühstücksbuffet). Ich übergebe den Namen des Ereignisses an die Methode, die auf das Frühstücksbuffet klickt, aber der Klick in HTML funktioniert nur mit dem obigen Bild, aber nicht mit dem untenstehenden. Irgendwelche Ideen, wie man das umgehen kann?

enter image description here

Html der Liste:

<div id="boundlist-1193" class="x-boundlist x-boundlist-floating x-layer x-boundlist-default x-border-box" tabindex="-1" style="right: auto; left: 100px; top: 97px; height: auto; width: 150px; z-index: 29001;" data-selenium-id="EventGrid-EventClassificationName-list"> 
 
    <div id="boundlist-1193-listEl" class="x-boundlist-list-ct x-unselectable" style="overflow: auto; height: auto;" role="presentation"> 
 
    <ul class="x-list-plain"> 
 
     <li class="x-boundlist-item" unselectable="on" role="option"> 
 
     <div>Buffet Breakfast</div> 
 
     </li> 
 
     <li class="x-boundlist-item" unselectable="on" role="option"> 
 
     <div>NotMarkedAsPosted</div> 
 
     </li> 
 
     <li class="x-boundlist-item" unselectable="on" role="option"> 
 
     <div>Package Afternoon Break</div> 
 
     </li> 
 
     <li class="x-boundlist-item" unselectable="on" role="option"> 
 
     <div>Package Dinner</div> 
 
     </li> 
 
     <li class="x-boundlist-item" unselectable="on" role="option"> 
 
     <div>Package Lunch</div> 
 
     </li> 
 
     <li class="x-boundlist-item" unselectable="on" role="option"> 
 
     <div>Package Morning Break</div> 
 
     </li> 
 
     <li class="x-boundlist-item" unselectable="on" role="option"> 
 
     <div>Party Hard</div> 
 
     </li> 
 
     <li class="x-boundlist-item" unselectable="on" role="option"> 
 
     <div>Unassigned</div> 
 
     </li> 
 
    </ul> 
 
    </div> 
 
</div>

+0

Sieht so aus, als ob Sie Selenium verwenden ... haben Sie verschiedene Treiber ausprobiert? oder verifiziert, dass das html-Element innerhalb des EventGrids existiert, nachdem der erste Klick ausgeführt wurde? Vielleicht ist es vorher da und nicht danach? Ein anderer Gedanke ... möchte vielleicht WebDriverWait zwischen Klicks betrachten. – Bret

+0

Ich denke, dass dieser Link Ihr Problem lösen wird. http://stackoverflow.com/questions/40220377/how-to-click-on-new-div-which-newly-generates-after-click-on-a-button-in/40232966#40232966 –

+0

Wenn Sie auf ein Element klicken Selen klickt auf die Mitte des Elements. Ich würde vorschlagen, dass Sie auf einen bekannten Ort wie das Feld Name in der aktuellen Zeile usw. klicken und sehen, ob das hilft. – JeffC

Antwort

1

Ich habe den Klick mit dem folgenden Code erreicht. Es scheint, wenn es mehrere Ereignisse gibt, fällt das HTML-Tag ab und wird entfernt. Bitte überprüfen Sie den folgenden Code. Ich habe auch den String-Parameter entfernt, als wenn ich den Namen eingibt, der nur ein Mitglied der Liste zurückgibt.

EventGrid.FindElement(By.XPath("//li/div")).Click(); 
RemoteWebElement element = (RemoteWebElement)driver.FindElement(By.XPath("//html")); 
var scrollIt = element.LocationOnScreenOnceScrolledIntoView; 
element.Click(); 
2

Sie können versuchen, klicken Sie einfach durch Koordinaten auszuführen, nachdem Sie Ihre Option ausgewählt haben.

action.MoveByOffset(x, y).Click().Perform(); 
+0

Welche Koordinaten verwende ich? –

+0

Sie können 200, 200 für den Start versuchen. – Ievgen

+1

Überprüfen Sie die akzeptierte Antwort hier -http: //stackoverflow.com/questions/25374013/selenium-click-on-coordinates-not-clicking-where-expected. Sieht so aus, als ob es zeigt, wo genau geklickt wird. – Ievgen

0

Von dem, was ich verstehe, ist Ihr Ziel onfocusout Ereignis ausgelöst zu bekommen. Ich hatte dieses Problem und dies löst mein Problem

driver.find_element_by_tag_name('body').send_keys(Keys.TAB)

, was es tut, ist Tabulatortaste Ereignis Körper sendet, (Sie HTML als Tag verwenden können, wenn Sie möchten). Ich benutze diese Version, da dies das bevorzugte Verhalten des Benutzers ist.

Verwandte Themen