Уведомления

Группа в Telegram: @pythonsu

#1 Март 24, 2013 02:11:21

Sckatik
Зарегистрирован: 2013-03-24
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Python+selenium

Всем доброй ночи! Я новичок в Python. Не могу понять как кликнуть по кнопке. Ввод логина пароля реализовал. А вот клик по кнопке не могу. Через js понятно как. А тут не могу понять. Даже поисковик не помог нигде не нашел решения. Может плохо искал. Тыкните на решение.

Офлайн

#2 Март 24, 2013 13:05:28

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Python+selenium

Используйте для кнопки метод click().
Можно еще для формы или для элемента формы использовать submit().
http://webdriverplus.org/en/latest/actions.html



Офлайн

#3 Март 24, 2013 13:46:28

Sckatik
Зарегистрирован: 2013-03-24
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Python+selenium

Что то не получается. Мне нужно кликнуть по диву. Если писать вот так, то возникает ошибка что атрибут не найден
elem = driver.find_element_by_css_selector('div')
elem.send_keys('logButton').click() – в этом месте что писать в send_keys? id элемента? или атрибут?

Офлайн

#4 Март 24, 2013 14:08:29

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Python+selenium

Ну див то не кнопка!
Если нужно именно запостить форму, попробуйте
send_keys('mypassword\n') для текстового поля ввода.

Если нужен именно клик, можно взять идею отсюда:
http://sqa.stackexchange.com/questions/2918/how-to-click-a-link-button-implemented-as-a-div-or-span-element-with-webdriver



Офлайн

#5 Март 24, 2013 15:11:08

Sckatik
Зарегистрирован: 2013-03-24
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Python+selenium

По диву кликнуть получилось. А если у дива не id а класс то что лучше использовать? и как кликнуть по ссылке?

Офлайн

#6 Март 24, 2013 17:56:19

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Python+selenium

Sckatik
А если у дива не id а класс то что лучше использовать? и как кликнуть по ссылке?
Все есть в документации:
http://webdriverplus.org/en/latest/selectors.html



Офлайн

#7 Март 24, 2013 18:43:23

Sckatik
Зарегистрирован: 2013-03-24
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Python+selenium

Пытаюсь сделать как в документации. Есть такая конструкция:

<div parentid="div_zvRmisipFbM" alignmargin="0,0,0,0" id="div_zfzMRJxiSIu" type="Control/Field:FieldButton" wscontrol="true" class="ws-field-button ws-control-inactive" tabindex="0" hidefocus="true" style="z-index: 1; float: left;"><button class="ws-input-control-element ws-field-button-element btn classic ws-default-button" title="" type="button"><div class="ws-field-button-medium ws-field-button-text-classic ws-field-button-text"><div class="ws-field-button-left"></div><div class="ws-field-button-right"></div><div class="ws-button-text-element ws-field-button-text-container-classic">+ Сотрудник</div></div></button></div>

Пишу так:
 driver.find_element_by_id("div_zfzMRJxiSIu").click()
driver.find_element_by_xpath("//button[@type='button']").click()
        

выдает ошибку:
Traceback (most recent call last):
  File "C:\test.py", line 14, in <module>
    driver.find_element_by_id("div_zfzMRJxiSIu").click()
  File "C:\Python32\lib\selenium\webdriver\remote\webdriver.py", line 188, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
  File "C:\Python32\lib\selenium\webdriver\remote\webdriver.py", line 667, in find_element
    {'using': by, 'value': value})['value']
  File "C:\Python32\lib\selenium\webdriver\remote\webdriver.py", line 155, in execute
    self.error_handler.check_response(response)
  File "C:\Python32\lib\selenium\webdriver\remote\errorhandler.py", line 147, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: 'Unable to locate element: {"method":"id","selector":"div_zfzMRJxiSIu"}' 

Отредактировано Sckatik (Март 24, 2013 18:43:57)

Офлайн

#8 Март 24, 2013 19:54:30

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Python+selenium

Элемент точно присутствует на странице в момент вызова метода?
Может он через JavaScript создается или подгружается?
Посмотрите что есть в browser.page_source и найдите сами нужный элемент.



Офлайн

#9 Март 24, 2013 20:03:13

Sckatik
Зарегистрирован: 2013-03-24
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Python+selenium

Через debuger Firefox элемент есть. попробую тогда Вашим способом через browser.page_source

Офлайн

#10 Март 25, 2013 05:54:46

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Python+selenium

Может быть, браузер не успевает отрисовать этот DIV, попробуйте подождать пару секунд и потом искать элемент. Если не получается, втыкаете pdb и начинает ручками исследовать состояние системы.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version