【发布时间】: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更新了问题
-
你能告诉我悬停事件在
ul或li或a...上的作用是什么意思吗??
标签: css asp.net selenium telerik