LINUX.ORG.RU

Странное поведение Selenium WebDriver + Python с Facebook

 ,


3

2

Осваиваю Selenium WebDriver. Пытаюсь заполнить профиль на фейсбуке. Когда давлю на «Редактировать профиль, попадаю на страничку редактирования. Пытаюсь заполнить родной город. Selenium находит линк, давит, аяксом подгружается форма. В этой форме находит инпут, пишет туда родной город, из выпадающего списка вариантов выбирает нужный, кликает. Все окейна. Но когда пытаюсь засабмитить форму, то не могу обнаружить кнопку. ни по имени, ни как либо еще.
Caught exception: <class 'selenium.common.exceptions.ElementNotVisibleException'> Message: u'Element is not currently visible and so may not be interacted with' ;
в inspect element давлю на кнопку, в цссках нету ничего похожего на display:none

Паста логина и апдейта профиля проблема в _update_hometown() да в принципе проблема в любой форме на той странице. все подгружаются аяксом, все выглядят одинаково, как внешне, так и внутренне.
Короче, то ли лыжи не едут, то ли я...

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

def is_element_present(self, how, what):
	try: self.driver.find_element(by=how, value=what)
	except NoSuchElementException, e: return False
	return True

def is_element_visible(self, how, what):
	try: return self.driver.find_element(by=how,value=what).is_displayed()
	except NoSuchElementException, ElementNotVisibleException: return False

А ваще, по вебдрайверу лучше писать на software-testing.ru

Lordwind ★★★★★
()
Ответ на: комментарий от Lordwind

WebDriverWait, expected_conditions и все такое уже перепробовал)) не знаю, в чем причина, но поиск по xpath помог с кнопкой справиться) проблемы с фейсбуком не закончились, конечно)) а за ресурс спасибо, что-то я как-то совсем тупанул, даже не подумал про него.

foreigner_web
() автор топика
Ответ на: комментарий от foreigner_web

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

Еще, Selenium IDE помогает отлаживать или выдавать код с готовыми локаторами

Lordwind ★★★★★
()
Ответ на: комментарий от Lordwind

спасибо, за советы. Это уже все попробовал. к сожалению IDE почему-то любит опираться на id, которые у фейсбука выдаются динамически. и со временем... 15 секунд давал, выкидывало с TimeoutException. в общем, как все решило... переписал все запросы через XPath и все заработало. не понимаю, в чем проблема была на самом деле

foreigner_web
() автор топика
Ответ на: комментарий от foreigner_web

В IDE тыцаешь на селектор справа от поля с локатором и выбираешь тип (id, xpath, css), сам долго не знал. Еще для FF есть классный плагин Element Locator for Webdriver (https://addons.mozilla.org/ru/firefox/addon/element-locator-for-webdriv/). Ну и лично по мне xpath самый гибкий и удобный, хотя при большом DOM начинаются тормоза.

Lordwind ★★★★★
()
Ответ на: комментарий от Lordwind

таки да, пробовал))) в IDE че только не ставил.. каждый раз тест фейлился. ide по ходу просто выдает несколько вариантов, которые составляются по их каким-то стандартам. Допустим, что-то типа //div[@class='target'/ul/li[1]] оно редко может предложить... надо разбираться, в общем

foreigner_web
() автор топика
Ответ на: комментарий от Lordwind

вот за документик огромное спасибо :) то, что надо!

foreigner_web
() автор топика
6 мая 2015 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.