Автоматизация зависания и нажатия многоуровневого меню навигации - PullRequest
0 голосов
/ 23 января 2020

У меня есть многоуровневое меню навигации в моем проекте. Сначала я должен определить, является ли ссылка подменю или узлом. Мне нужно навести курсор на пункты меню (которые являются гиперссылками) и щелкнуть по всем гиперссылкам под ними, чтобы открыть страницы, если они являются последними в иерархии или если они являются подменю, тогда мне нужно навести курсор и далее открыть меню и нажмите на все гиперссылки под ними.

Ниже приведен мой код

    @FindBy(xpath = "//ul[@id='menu-main-navigation-1']//li[contains(@class,'menu-item-has-children')]")
    private List<WebElement> menuItems;

    public void checkNavigationMenuLinks() {
        String parentTab = null;
        String clickOnLink = Keys.chord(Keys.CONTROL, Keys.ENTER);

        WaitUtilities.waitLongForElementVisible(navigationMenu);
        if (WaitUtilities.elementIfVisible(navigationMenu)) {
            for (WebElement link : menuItems) {
                MouseHoverUtilities.hover(link);
                List<WebElement> linksInSubmenu = link.findElements(By.tagName("a"));
                for(WebElement submenuLink : linksInSubmenu) {
                    String href = submenuLink.getAttribute("href");
                    submenuLink.sendKeys(clickOnLink);
                    Iterator<String> handleIterator = Browser.driver.getWindowHandles().iterator();
                    parentTab = handleIterator.next();
                    if(handleIterator.hasNext()) {
                        Browser.driver.switchTo().window(handleIterator.next());
                        Browser.driver.close();
                        Browser.driver.switchTo().window(parentTab);
                    }
                }
            }
            Browser.driver.switchTo().window(parentTab);
        }
    }

Код работает нормально до первого подменю. Количество пунктов меню правильное. Он пытается l oop через меню, пытаясь щелкнуть их ссылки. Поскольку элементы подменю также являются ссылками, код нажимает на них вместо того, чтобы навести на них курсор, чтобы открыть его содержимое, и вот когда он разрывается.

Что можно сделать, чтобы оно зависало в подменю вместо нажатия на него ?

Ниже приведена упрощенная версия HTML для моего меню навигации

<nav>
   <ul>
      <li class='menu-item-has-children'> 
         <a href='https://xxx'>xxx</a>
         <div>
           <div>
             <ul>
               <li class='menu-item-has-no-children'> 
                  <a href='https://xxx'>xxx</a>
               </li>
               <li class='menu-item-has-no-children'> 
                  <a href='https://xxx'>xxx</a>
               </li>
               <li class='menu-item-has-no-children'> 
                  <a href='https://xxx'>xxx</a>
               </li>
               </ul>
             </div>
           </div>
          </li>    
         </ul> 
      </li>
      <li class='menu-item-has-children'> 
         <a href='https://xxx'>xxx</a>
         <div>
           <div>
             <ul>
               <li class='menu-item-has-children'> 
                  <a href='https://xxx'>xxx</a>
                     <div>
                       <div>
                         <ul>
                           <li class='menu-item-has-no-children'> 
                              <a href='https://xxx'>xxx</a>
                           </li>
                           <li class='menu-item-has-no-children'> 
                              <a href='https://xxx'>xxx</a>
                           </li>
                           <li class='menu-item-has-no-children'> 
                              <a href='https://xxx'>xxx</a>
                           </li>
                        </ul>
                       </div>
                    </div>
               </li>
               <li class='menu-item-has-children'> 
                  <a href='https://xxx'>xxx</a>
                     <div>
                       <div>
                         <ul>
                           <li class='menu-item-has-no-children'> 
                              <a href='https://xxx'>xxx</a>
                           </li>
                           <li class='menu-item-has-no-children'> 
                              <a href='https://xxx'>xxx</a>
                           </li>
                           <li class='menu-item-has-no-children'> 
                              <a href='https://xxx'>xxx</a>
                           </li>
                        </ul>
                       </div>
                    </div>
               </li>  
               <li class='menu-item-has-children'> 
                  <a href='https://xxx'>xxx</a>
                     <div>
                       <div>
                         <ul>
                           <li class='menu-item-has-no-children'> 
                              <a href='https://xxx'>xxx</a>
                           </li>
                           <li class='menu-item-has-no-children'> 
                              <a href='https://xxx'>xxx</a>
                           </li>
                           <li class='menu-item-has-no-children'> 
                              <a href='https://xxx'>xxx</a>
                           </li>
                        </ul>
                       </div>
                    </div>
               </li>
               </ul>
             </div>
           </div>
          </li>    
      <li class='menu-item-has-children'> 
         <a href='https://xxx'>xxx</a>
         <div>
           <div>
             <ul>
               <li class='menu-item-has-no-children'> 
                  <a href='https://xxx'>xxx</a>
               </li>
               <li class='menu-item-has-no-children'> 
                  <a href='https://xxx'>xxx</a>
               </li>
               <li class='menu-item-has-no-children'> 
                  <a href='https://xxx'>xxx</a>
               </li>
               </ul>
             </div>
           </div>
          </li>    
         </ul> 
         </li>
         </ul> 
      </li>
   </ul>
</nav>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...