2016-07-09 8 views
2

У меня есть веб-страницу со следующим:Правильный способ ждать ссылки нажмите селеном

<a id="show_more" class="friends_more" onclick="Friends.showMore(-1)" 
                  style="display: block;"> 
    <span class="_label">Show More Friends</span><span class="friends_more_icon"></span> 
</a> 

Я хочу нажать на эту ссылку в Python 3.5 с селеном в браузере Chrome. Если я использую WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, id_text))), а затем перейдите и щелкните по нему, ничего не произойдет. Однако, если я жду после того, как WebDriverWait возвращает элемент, который можно щелкнуть, я могу щелкнуть его. Я попробовал 2 способа щелкнуть по ссылке:

more_friends_link = wait_for_id("show_more", driver) 
ActionChains(driver).move_to_element(more_friends_link).click(more_friends_link).perform() 

И

more_friends_link = wait_for_id("show_more", driver) 
more_friends_link.click() 

И оба пути работают нормально, если ждать дополнительно после WebDriverWait возвращает элемент. Я не возражаю ждать, но я хочу выяснить, почему это происходит, поскольку ни один из методов щелчка не генерирует исключение, из-за чего я считаю, что элемент присутствует, видимый и кликабельный, но он не реагирует на щелчок.

UPD: Я забыл упомянуть, что сценарий работал нормально, пока сайт не изменил свой дизайн. Раньше ссылку можно было найти по тексту ссылки, и щелчок работал просто отлично.

UPD2: Так что в настоящее время мой код выглядит следующим образом:

more_friends_link = WebDriverWait(driver, 10).until(
     EC.element_to_be_clickable((By.ID, "show_more"))) 
    time.sleep(5) 
    more_friends_link.click() 

моя цель состоит в том, чтобы заменить time.sleep(5) с чем-то более значимым

+0

Что делать, если вы добавляете 'driver.execute_script (" arguments [0] .scrollIntoView(); ", more_friends_link)' перед нажатием? – alecxe

+0

Все еще не повезло - попробовал это :(Кстати, элемент виден в окне браузера. –

+2

Из того, что я понимаю (на этот момент я могу только догадываться), кнопка «показать больше» отключается в то время как текущая страница/набор друзей загружается. Вероятно, это отключено нетрадиционным способом. В любом случае подумайте о добавлении ссылки на целевую страницу, если это возможно. Спасибо. – alecxe

ответ

1

Попробуйте заменить

WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, id_text))) 

с

WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, id_text))) 
+0

Нет, еще не повезло, к сожалению. Кстати, если он не был доступен для кликов, не будет ли 'click()' метод выдавать исключение? –

+0

Если элемент был найден, но он не доступен для кликабельности, не было бы никакого исключения - просто никаких действий – Andersson

+0

Ну, в любом случае, переход на 'EC.element_to_be_clickable' не помог до сих пор –

Смежные вопросы