Функция наведения мыши работает только в первый раз - PullRequest
0 голосов
/ 17 мая 2019

Я пишу несколько тестов на Python / Selenium и пытаюсь проверить систему выпадающего меню.Когда вы наведите курсор мыши на один из элементов верхнего меню, он отобразит элементы подменю под ним, позволяя тестовому коду щелкнуть подменю.

Проблема, с которой я сталкиваюсь, заключается в том, что я могунаведите курсор мыши на верхний пункт меню, и он правильно откроет подменю, но если я попытаюсь открыть то же самое верхнее меню, чтобы выбрать следующий пункт подменю, тогда функция hover_over_menu_item ничего не делает, ошибок нетно он не открывает элемент верхнего меню.

Но если я сначала наведу указатель мыши на другой элемент верхнего меню, чтобы он отобразил это подменю, то я могу навести курсор мыши на исходное главное меню, и оно откроется правильно.

HTML:

   # The HTML looks like:         
   <div class="desktop-navbar">
       <dropdown class="nav-bar-item ">  <---First top level menu item
           <label class=”animate” for=”0menu"
           <ul class=”animate” for=”0menu”> <--- List of sub menu's
       <dropdown class="nav-bar-item ">  <---Second top level menu item
       <dropdown class="nav-bar-item ">  <---Third top level menu item

Код:

    def open_top_menu(top_menu_name)    
        # Retrieve an array of the Web Elements that make up the top menu
        css = '.nav-bar-item'
        we_menu_array = driver.find_elements(By.CSS_SELECTOR, css)

        # I then scan through this array looking for the Menu name
        # I require and after I have found the correct top menu
        # item, I mouse over it to expand the sub-menu:
        count = len(we_menu_array)
        for i in range(0, count):
            menu_name = we_menu_array[i].text.strip()
            if menu_name.upper() == top_menu_name.upper():
                 hover_over_menu_item(we_array[i])
                 result = True
                break

        return result


def hover_over_menu_item(we):
    action = ActionChains(driver)
    action.move_to_element(we)
    action.perform()
...