【问题标题】:Selenium issues with Telerik RadMenuTelerik RadMenu 的硒问题
【发布时间】:2016-10-26 06:06:05
【问题描述】:

自从过去 2 天以来,我一直在努力寻找使用 Selenium 为我的 asp.net 网站编写集成测试的最佳方法,但没有任何运气。

我正在使用类似这样的 Telerik RadMenu -

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

它的工作方式是 - 用户将鼠标悬停在 Root menu 上打开 Menu 并使用悬停打开 Sub Menu 并单击它打开 Telerik 对话框。

我尝试了几种方法来执行 2 次悬停和单击,如下所示 -

方法一:

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();

方法二:

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(); 

生成的 HTML 如下所示 -

<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>

在第二种方法中,我使用 rmLevel1 和 rmLevel2 css 类,因为 Telerik 将 rmLevel1 分配给 ul 用于 Menu 并将 rmLevel2 类分配给 ul 用于 Sub Menu

问题是方法 1 仅在某些时候有效(大多数情况下它只是在 Sub Menu 级别悬停执行时失败),即使我指定了第一个元素,方法 2 也会选择第二个元素。换句话说,它从列表中选择了不正确的元素。

请帮助以更好的方式执行此操作。

【问题讨论】:

  • 请先分享您要执行悬停的 HTML...
  • 刚刚用生成的html更新了问题
  • 你能告诉我悬停事件在ullia...上的作用是什么意思吗??

标签: css asp.net selenium telerik


【解决方案1】:
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(); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多