2016-06-23 6 views
0

Seit den letzten 2 Tagen arbeite ich daran, die beste Möglichkeit zu finden, Integrationstests für meine asp.net Website mit Selenium ohne Glück zu schreiben.Selen Probleme mit Telerik RadMenu

Ich verwende Telerik RadMenu, die so etwas wie dieses -

Root Menu 
- Menu 1 
    - Sub Menu 1.1 
    - Sub Menu 1.2 
- Menu 2 
    - Sub Menu 2.1 
- Menu 3 
    - Sub Menu 3.1 
    - Sub Menu 3.2 
    - Sub Menu 3.3 

Die Funktionsweise ist - Benutzer über Root menu schwebt die Menu und mit Hover öffnet es öffnet Sub Menu und darauf klicken öffnet Telerik Dialogfeld.

Ich versuchte paar Möglichkeiten 2 schwebt und einen Klick auszuführen, die wie folgt aussieht -

Methode 1:

Actions action = new Actions(Browser.Driver); 
IWebElement we = Browser.Driver.FindElement(By.XPath("//*[@id='ctl00_ContentPlaceHolder1_RadMenu1']")); 
action.MoveToElement(we).MoveToElement(we.FindElement(By.XPath("ul/li/div/ul/li[1]"))).Build().Perform(); 
action.MoveToElement(we.FindElement(By.XPath("ul/li/div/ul/li[1]/div/ul/li[1]"))).Click().Build().Perform(); 

Methode 2:

var advFilter = Browser.Driver.FindElement(By.Id("ctl00_ContentPlaceHolder1_RadMenu1")); 

    Actions action = new Actions(Browser.Driver); 
    var advFiltersPrimary = Browser.Driver.FindElements(By.CssSelector(".rmLevel1>li"))[0]; 
action.MoveToElement(advFilter).MoveToElement(advFiltersPrimary).Build().Perform(); 
    var advFiltersSec = Browser.Driver.FindElements(By.CssSelector(".rmLevel2>li"))[0]; 
    action.MoveToElement(advFiltersSec).Click().Build().Perform(); 

Der erzeugte HTML sieht aus wie dies -

<div id="ctl00_ContentPlaceHolder1_RadMenu1" class="RadMenu RadMenu_Default " style="z-index: 7000;"> 
    <ul class="rmHorizontal rmRootGroup"> 
     <li class="rmItem rmFirst rmLast" style="z-index: 0;"><a href="#" class="rmLink Menulevel1" id="advMenu" style="color:White;background-color:#7F5EBA;" tabindex="-1"><img alt="" src="../../images/icons/addFilters.gif" class="rmLeftImage"><span class="rmText rmExpandDown">Root Menu</span></a><div class="rmSlide" style="visibility: visible; height: 301px; width: 260px; display: none; overflow: hidden; left: 0px; top: -301px; z-index: 2;"> 
      <ul class="rmVertical rmGroup rmLevel1" style="width: 258px; display: block; top: 301px; left: 0px; visibility: visible;"> 
       <li class="rmItem rmFirst" style="z-index: 0;"><a href="#" class="rmLink " style="color: rgb(51, 51, 51); border-color: rgb(195, 195, 195); width: 254px; background-color: white;" tabindex="-1"><span class="rmText rmExpandRight">Menu 1</span></a><div class="rmSlide" style="visibility: visible; height: 210px; width: 214px; display: none; overflow: hidden; left: 258px; top: 0px; z-index: 16;"> 
        <ul class="rmVertical rmGroup rmLevel2" style="display: block; width: 212px; top: 0px; left: -214px; visibility: visible;"> 
         <li class="rmItem rmFirst"><a href="#" class="rmLink " style="color: rgb(51, 51, 51); border-color: rgb(195, 195, 195); width: 208px; background-color: rgb(240, 240, 240);" tabindex="-1"><span class="rmText ">Sub Menu 1.1</span></a></li><li class="rmItem"><a href="#" class="rmLink " style="color: rgb(51, 51, 51); border-color: rgb(195, 195, 195); text-decoration: none; width: 208px; background-color: rgb(240, 240, 240);" tabindex="-1"><span class="rmText ">Sub Menu 1.2</span></a></li> 
        </ul> 
       </div></li><li class="rmItem" style="z-index: 0;"><a href="#" class="rmLink " style="color: rgb(51, 51, 51); border-color: rgb(195, 195, 195); width: 254px; background-color: white;" tabindex="-1"><span class="rmText rmExpandRight">Menu 2</span></a><div class="rmSlide" style="visibility: visible; height: 279px; width: 225px; display: none; overflow: hidden; left: 258px; top: 0px; z-index: 16;"> 
        <ul class="rmVertical rmGroup rmLevel2" style="width: 223px; display: block; top: 0px; left: -225px; visibility: visible;"> 
         <li class="rmItem rmFirst"><a href="#" class="rmLink " style="color: rgb(51, 51, 51); border-color: rgb(195, 195, 195); width: 219px; background-color: rgb(240, 240, 240);" tabindex="-1"><span class="rmText ">Sub Menu 2.1</span></a></li> 
        </ul> 
       </div></li><li class="rmItem" style="z-index: 0;"><a href="#" class="rmLink " style="color: rgb(51, 51, 51); border-color: rgb(195, 195, 195); width: 254px; background-color: white;" tabindex="-1"><span class="rmText rmExpandRight">Menu 3</span></a><div class="rmSlide" style="visibility: visible; height: 233px; width: 271px; display: none; overflow: hidden; left: 258px; top: -40px; z-index: 16;"> 
        <ul class="rmVertical rmGroup rmLevel2" style="display: block; width: 269px; top: 0px; left: -271px; visibility: visible;"> 
         <li class="rmItem rmFirst"><a href="#" class="rmLink " style="color: rgb(51, 51, 51); border-color: rgb(195, 195, 195); width: 265px; background-color: rgb(240, 240, 240);" tabindex="-1"><span class="rmText ">Sub Menu 3.1</span></a></li><li class="rmItem"><a href="#" class="rmLink " style="color: rgb(51, 51, 51); border-color: rgb(195, 195, 195); width: 265px; background-color: rgb(240, 240, 240);" tabindex="-1"><span class="rmText ">Sub Menu 3.2</span></a></li><li class="rmItem"><a href="#" class="rmLink " style="color: rgb(51, 51, 51); border-color: rgb(195, 195, 195); width: 265px; background-color: rgb(240, 240, 240);" tabindex="-1"><span class="rmText ">Sub Menu 3.3</span></a></li> 
        </ul> 
       </div></li> 
      </ul> 
     </div></li> 
    </ul> 
</div> 

In der zweiten Methode verwende ich rmLevel1 und rmLevel2 css Klasse seit Telerik rmLevel1 zu ul für Menu zugewiesen und zugewiesene Klasse rmLevel2 zu ul für Sub Menu.

Das Problem ist Methode 1 funktioniert nur manchmal (die meisten Male es nur bei der Hover-Ausführung Sub Menu fehlschlägt) und Methode 2 wählt 2. Element, auch wenn ich 1. Element angeben. Mit anderen Worten, es wählt ein falsches Element aus der Liste aus.

Bitte helfen Sie mit dem besseren Weg, dies zu tun.

+0

Bitte teilen Sie den HTML-Code für diese erste, wo Sie schweben ausführen möchten ... –

+0

einfach die Frage mit generierten HTML aktualisiert – user979189

+0

Sie mir sagen, wo Hover-Ereignis funktioniert bedeutet auf auf 'ul' oder' li' oder 'a' ... ?? –

Antwort

0
var advFilter = Browser.Driver.FindElement(By.Id("ctl00_ContentPlaceHolder1_RadMenu1")); 
Actions action = new Actions(Browser.Driver); 
var advFiltersPrimary = Browser.Driver.FindElements(By.CssSelector(".rmLevel1>li"))[0];  
action.MoveToElement(advFilter).MoveToElement(advFiltersPrimary).Build().Perform(); 
var advFiltersSec = Browser.Driver.FindElements(By.CssSelector(".rmLevel2:nth-of-type(2)>li"))[0]; 
action.MoveToElement(advFiltersSec).Click().Build().Perform();