Используя. net Selenium, наведите курсор и выберите в меню Nav - PullRequest
0 голосов
/ 20 января 2020

У меня проблема с выбором элементов меню с помощью Selenium. net framework, DOM содержит <ul> <li>

Вот структура меню, я пытаюсь выбрать Level2B из приведенного ниже кода

<div class="RadAjaxPanel" id="ctl00_ctl00_RadMenu1Panel" style="display: block;">
   <div tabindex="0" id="ctl00_RadMenu1" class="RadMenu RadMenu_Bootstrap" style="visibility: visible; z-index: 8000;">
      <ul class="rmRootGroup rmRoundedCorners rmHorizontal">
         <li class="rmItem " style="z-index: 0;">
            <a class="rmLink rmRootLink" href="#"><span class="rmText rmExpandDown">Level0</span></a>
            <div class="rmSlide" style="visibility: visible; height: 74px; width: 190px; display: none; overflow: hidden; left: 0px; top: 56px; z-index: 9;">
               <ul class="rmVertical rmGroup rmLevel1" style="display: block; top: -74px; left: 0px; visibility: visible; transition: none 0s ease 0s;">
                  <li class="rmTopRight"></li>
                  <li class="rmBottomLeft"></li>
                  <li class="rmBottomRight"></li>
                  <li class="rmTopFix"></li>
                  <li class="rmBottomFix"></li>
                  <li class="rmItem rmFirst">
                     <a class="rmLink" href="Level1A.aspx" style="width: 190px;"><span class="rmText rmExpandRight">Level1A</span></a>
                     <div class="rmSlide">
                        <ul class="rmVertical rmGroup rmLevel2">
                           <li class="rmItem rmFirst"><a class="rmLink" href="Level2A.aspx"><span class="rmText">Level2A</span></a></li>
                           <li class="rmItem "><a class="rmLink" href="Level2B.aspx"><span class="rmText">Level2B &amp; Level2B</span></a></li>
                           <li class="rmItem ">
                              <a class="rmLink" href="#"><span class="rmText">Level2D</span></a>
                              <div class="rmSlide">
                                 <ul class="rmVertical rmGroup rmLevel3">
                                    <li class="rmItem rmFirst"><a class="rmLink" href="Level3A.aspx"><span class="rmText">Level3A</span></a></li>
                                    <li class="rmItem "><a class="rmLink" href="Level3B.aspx?resultid=5"><span class="rmText">Level3B</span></a></li>
                                    <li class="rmItem rmLast"><a class="rmLink" href="Level3C.aspx?resultid=10"><span class="rmText">Level3C</span></a></li>
                                 </ul>
                              </div>
                           </li>
                           <li class="rmItem rmLast"><a class="rmLink" href="#"><span class="rmText">Level2F</span></a></li>
                        </ul>
                     </div>
                  </li>
                  <li class="rmItem rmLast"><a class="rmLink" href="Level1B.aspx" style="width: 190px;"><span class="rmText">Level1B</span></a></li>
               </ul>
            </div>
         </li>
      </ul>
   </div>
</div>

Вот код, который я пробовал, получаю исключение элемента не найдено

var qmsMenu = t._driver.FindElement(By.ID("ctl00_RadMenu1"));
            var menuItemsAll = qmsMenu.FindElements(By.ClassName("rmItem "));
            var n=menuItemsAll.Count;
            for (int i = 0; i < n; i++)
            {
                if (menuItemsAll[i].Text.ToLower().Contains("Level0"))
                    menuItemsAll[i].Click();

                var subMenuItems = menuItemsAll[i].FindElement(By.ClassName("rmSlide"));
                var leafNodes = subMenuItems.FindElements(By.ClassName("rmItem "));
                var leafNodesCount = leafNodes.Count;
                for (int j = 0; j < leafNodesCount; j++)
                {
                    if (leafNodes[j].Text.ToLower().Contains("Level2B"))
                        leafNodes[j].Click();
                }
            }
...