Не виден элемент style="display: inline-block"

python
webdriver
Теги: #<Tag:0x00007f7b651b5a20> #<Tag:0x00007f7b651b57f0>

#1

Проблема такая, не видны элементы (подпункты меню) соответственно не могу кликнуть на нужный элемент.

Изначально элемент скрыт

<div id="mm_box_s" class="mm_sub2w" style="display: none;">
            <div class="mm_sub_line">
                <a href="/ru/sale/women" id="mm_s_w">Для женщин</a>
                <a href="/ru/sale/men" id="mm_s_m">Для мужчин</a>
            </div>
        </div>

Далее, я средствами вебдрайвера кликаю на пункт меню, в котором находятся эти подпункты и они отображаются.

<div id="mm_box_s" class="mm_sub2w active" style="display: inline-block;">
            <div class="mm_sub_line">
                <a href="/ru/sale/women" id="mm_s_w">Для женщин</a>
                <a href="/ru/sale/men" id="mm_s_m">Для мужчин</a>
            </div>
        </div>

Далее я попытался найти элемент следующим образом:

sale=WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,"mm_s_w")))
sale.click()

К сожалению элемент для вебдрайвера остается не видимым.
Ошибка: TimeoutException


(Vladislav Abramov) #2

Так может он и не видим, а что-то прозрачное сверху нарисовано

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


#3

В случае, если делаю следующим образом:

sale = driver.find_element_by_id("mm_s_w")

появляется ошибка:
selenium.common.exceptions.ElementNotVisibleException: Message: element not interactable


#4

в случае клика мышкой по этому элементу:

Message: stale element reference: element is not attached to the page document

И перехожу в нужный раздел


(antonio-33) #5

Там точно нет аякс запроса при открытии меню? А если thread.sleep(или его аналог в вашем языке) на секунд пять поставить после открытия меню, И потом попытаться кликнуть по нужному пункту?


(Volodymyr Romanyshyn) #6

Можно сначала проверить в консоли, действительно ли елемент есть только один //(@id = ‘mm_s_w’)
если один попробуйте xpath //div(@class= ‘mm_sub2w active’)//
(@id = ‘mm_s_w’)