2016-07-27 10 views
0

Ich habe ein Problem bei der Auswahl eines Drop-Down-Wert in C# -Webdriver. Ich erhalte eine Fehlermeldung, die besagt, dass es sich um ein unsichtbares Element handelt. Ich habe beim Zugriff auf versteckte Elemente im Web-Treiber C# recherchiert, konnte aber keine funktionsfähige Lösung finden. Bisher habe ich die Actions-Methode und den Java-Script-Executor ausprobiert, bin mir aber nicht sicher, was ich falsch mache. Ich bin ziemlich neu in der Automatisierung und verwende die C# Sprache.So wählen Sie versteckte Werte aus dem Dropdown C# webdriver

Dies ist mein Code unten Aktionen Methode

IWebElement actionsMenu = driver.FindElement(By.Id("InitiatorID")); 
Actions action = new Actions (driver); 
action.MoveToElement(actionsMenu).Build().Perform();  
driver.FindElement(By.CssSelector("[index ='2']")).Click();**/ 

Skript Java Script Executor

((IJavaScriptExecutor)wd).ExecuteScript("arguments[0].Click()"); 
wd.FindElement(By.XPath("//input[@value = Bridget]")); 
String("arguments[0].trigger('click')"); 
wd.FindElement(By.XPath("//input[@value = Bridget]")); 

Ich bin neu in Java Script auch, ich bin nicht sicher zu verwenden, wenn die Syntax falsch ist. Dies ist die HTML

<div class="question"> 
    <label for="InitiatorID">Initiator:</label> 
    <div id="InitiatorID_chzn" class="chzn-container chzn-container-single" style="width: 270px;"> 
     <a href="javascript:void(0)" class="chzn-single" tabindex="-1"> 
     <span>Not Assigned</span> 
     </a> 
     <div class="chzn-drop" style="left: -9000px; width: 268px; top: 24px;"> 
     <div class="chzn-search"> 
      <input type="text" autocomplete="off" style="width: 233px;" tabindex="-1"> 
     </div> 
     <ul class="chzn-results"> 
      <li id="InitiatorID_chzn_o_0" class="active-result result-selected" style="">Not Assigned</li> 
     </div> 

Kann jemand bitte helfen dieses Problem zu lösen. Danke für Ihre Hilfe.

+0

Dies ist eine unorderlist Kategorie Dropdown, in der die Werte nur sichtbar sind, nachdem Sie darauf geklickt haben. Die Lösung, die ich vorschlage, ist zuerst das Element zu finden, auf das Sie klicken müssen. Und benutze element.click. Manuall sehen den HTML-Code der UL- und LI-Tags, wenn Sie auf das Element geklickt haben. Definitiv können Sie den HTML-Code zur Identifizierung der UL und LI.Capture alle LI-Tags sehen und durch jeden Wert durchlaufen und klicken Sie darauf. Es gibt viele Threads, die auf demselben Problem ausgeführt werden. Bitte google. – Siva

Antwort

0

Ich denke, Sie machen die Dinge zu kompliziert. Es sollte nicht notwendig sein, das Element manuell mit Aktionen zu verschieben. Können Sie Folgendes versuchen?

//Find the dropdown container and click it 
IWebElement actionMenu = driver.FindElement(By.Id("InitiatorID")); 
actionMenu.Click(); //Feel free to condense this to just driver.FindElement().Click(); 

//Find the now visible option and click it 
driver.FindElement(By.XPath("//input[@value = Bridget]")).Click(); 
+0

Wenn es ein Menü ist, das auf Schweben erweitert wird, dann ist das anders, ich habe die Frage vielleicht falsch interpretiert. Lass es mich wissen und ich werde versuchen es zu ändern. –

+0

Hallo Chai/Parker, Die manuellen Aktionen sind, Klicken Sie auf ein Dropdown und klicken Sie dann auf einen Wert aus dem Dropdown. Daher klickt mein Code nicht einmal auf das Dropdown-Menü, da die Anzeige keine anzeigt. – Kalaivani

+0

'SelectElement' funktioniert nur mit SELECT-Tags. Dies ist einer der Fälle, in denen das Dropdown nicht wirklich ein 'SELECT'-Tag ist, so dass dieser Code nicht funktioniert. – JeffC

1

Ich bin nicht sicher, ob es aber mir hilft lassen trotzdem versuchen:

Zunächst einmal ist Selen WebDriver grundsätzlich für Sachen automatisieren Sie manuell tun können. Manuell kann man nicht auf ein verstecktes Element klicken, also kann man mit Selen auch nicht. Wahrscheinlich können Sie, wenn Sie diesen Wert manuell auswählen können, einige Schritte ausführen, in denen Sie zum Öffnen eines Dropdown-Menüs klicken, oder wie Parker Beck vorschlägt, über einem Element zu schweben, um ein Dropdown-Menü zu öffnen. Sobald das Element sichtbar und aktiv ist, können Sie darauf klicken. Mit Selen müssen Sie alle die gleichen Schritte automatisieren.

Und vielleicht ist die Antwort ein bisschen einfacher: Es könnte sein, dass nach dem Verschieben auf das Element action.MoveToElement(actionsMenu).Build().Perform(); Sie warten müssen, bevor Sie klicken oder Webdriver wird zu schnell sein! Es gibt viele Möglichkeiten zu warten, nur ein bisschen suchen und Sie werden eine Reihe von Themen dazu finden!

Bearbeiten Sie nach dem Lesen Ihres Kommentars: action.MoveToElement (actionsMenu) .Build(). Perform(); ==> bewegt nur den Mauszeiger. Es wird nicht angeklickt, so dass Ihr nächstes Element nicht sichtbar ist. Wenn Sie zweimal manuell klicken müssen, sollte Ihr Selencode auch zweimal klicken. Soweit ich das bisher verstanden habe, können Sie den ersten Klick verpassen.

+0

Ich stimme nicht zu, dass "Dies bietet keine Antwort auf die Frage." - Es tut. –