Перейти к содержимому

Фотография

Не работает поиск элемента по id; Selenium+Python


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 8

#1 KinaMa

KinaMa

    Новый участник

  • Members
  • Pip
  • 5 сообщений

Отправлено 05 декабря 2016 - 04:59

Доброе утро.

Вопрос у меня такой: есть на сайте кнопка (text button) при клике на которую появляется выпадающий список из двух элементов.

Не получается кликнуть ни по этой кнопке, ни по элементу из списка. Обращаюсь по id, пробовала и по name, и по селектору.

Подскажите, пожалуйста, в чем может состоять моя ошибка?

Спасибо.

wd.find_element_by_id("user_name").click() 

wd.find_element_by_css_selector(".component-list-def .list div:last-child").click()


  • 0

#2 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 05 декабря 2016 - 06:45

Что значит не работает ?

Ошибка есть какая-нибудь

 

и нужен код


  • 1

#3 KinaMa

KinaMa

    Новый участник

  • Members
  • Pip
  • 5 сообщений

Отправлено 05 декабря 2016 - 07:19

Вот вся процедура, которая предполагается:

 

Не кликает на элемент. Когда сама "руками кликаю по нему", то затем тест идет дальше сам. А именно кликнуть на кнопку text button не получается.

 

 

from selenium.webdriver.firefox.webdriver import WebDriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import time

success = True
wd = WebDriver()
wd.implicitly_wait(60)

def is_alert_present(wd):
try:
wd.switch_to_alert().text
return True
except:
return False

try:
wd.get("")
wd.find_element_by_css_selector("input.editable").click()
wd.find_element_by_css_selector("input.editable").clear()
wd.find_element_by_css_selector("input.editable").send_keys("sovsemlich@gmail.com")
wd.find_element_by_xpath("//div[@class='component-fields']/div[2]/input").click()
wd.find_element_by_xpath("//div[@class='component-fields']/div[2]/input").clear()
wd.find_element_by_xpath("//div[@class='component-fields']/div[2]/input").send_keys("1111")
wd.find_element_by_css_selector("div.button-primary").click()
import time
time.sleep(15)
wd.find_element_by_name("user_name").click() #не кликает именно в этом месте.
import time
time.sleep(2)
wd.find_element_by_name("list_val_exit").click()
import time
time.sleep(3)
if not ("Вход в личный кабинет" in wd.find_element_by_css_selector(".auth-block h3").text):
success = False
print("verifyTextPresent failed")
finally:
wd.quit()
if not success:
raise Exception("Test failed.")

 

Если "руками" я не нажму, то выдает следующее в конце:

Traceback (most recent call last):
  File "C:/Users/k.isakhanyan/Desktop/Ex.py", line 33, in <module>
    wd.find_element_by_name("list_val_exit").click()
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 365, in find_element_by_name
    return self.find_element(by=By.NAME, value=name)
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 752, in find_element
    'value': value})['value']
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
'NoneType' object has no attribute 'path'
    self.error_handler.check_response(response)
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [name="list_val_exit"]
 
 
Process finished with exit code 1

  • 0

#4 Vad1m198

Vad1m198

    Активный участник

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Вадим


Отправлено 05 декабря 2016 - 08:25

`wd.find_element_by_name("user_name").click()`

Так все таки by name или by id ?


  • 0

#5 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 05 декабря 2016 - 08:34

del


Сообщение отредактировал Freiman: 05 декабря 2016 - 11:33

  • 0

#6 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 05 декабря 2016 - 08:34

2 ТС:

У вас в первом сообщении:

wd.find_element_by_id("user_name").click()

Потом ты пишешь:

wd.find_element_by_name("user_name").click()

  • 0

#7 KinaMa

KinaMa

    Новый участник

  • Members
  • Pip
  • 5 сообщений

Отправлено 05 декабря 2016 - 08:36

Я пробовала и так, и так. Там одинаковое наименование у этих атрибутов.

Сюда скопировала тот код, который был последним вариантом.


  • 0

#8 KinaMa

KinaMa

    Новый участник

  • Members
  • Pip
  • 5 сообщений

Отправлено 05 декабря 2016 - 09:07

 

Вот вся процедура, которая предполагается:

 

Не кликает на элемент. Когда сама "руками кликаю по нему", то затем тест идет дальше сам. А именно кликнуть на кнопку text button не получается.

 

 

from selenium.webdriver.firefox.webdriver import WebDriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import time

success = True
wd = WebDriver()
wd.implicitly_wait(60)

def is_alert_present(wd):
try:
wd.switch_to_alert().text
return True
except:
return False

try:
wd.get("http://")
wd.find_element_by_css_selector("input.editable").click()
wd.find_element_by_css_selector("input.editable").clear()
wd.find_element_by_css_selector("input.editable").send_keys("sovsemlich@gmail.com")
wd.find_element_by_xpath("//div[@class='component-fields']/div[2]/input").click()
wd.find_element_by_xpath("//div[@class='component-fields']/div[2]/input").clear()
wd.find_element_by_xpath("//div[@class='component-fields']/div[2]/input").send_keys("1111")
wd.find_element_by_css_selector("div.button-primary").click()
import time
time.sleep(15)
wd.find_element_by_name("user_name").click() #не кликает именно в этом месте.
import time
time.sleep(2)
wd.find_element_by_name("list_val_exit").click()
import time
time.sleep(3)
if not ("Вход в личный кабинет" in wd.find_element_by_css_selector(".auth-block h3").text):
success = False
print("verifyTextPresent failed")
finally:
wd.quit()
if not success:
raise Exception("Test failed.")

 

Если "руками" я не нажму, то выдает следующее в конце:

Traceback (most recent call last):
  File "C:/Users/k.isakhanyan/Desktop/Ex.py", line 33, in <module>
    wd.find_element_by_name("list_val_exit").click()
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 365, in find_element_by_name
    return self.find_element(by=By.NAME, value=name)
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 752, in find_element
    'value': value})['value']
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
'NoneType' object has no attribute 'path'
    self.error_handler.check_response(response)
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [name="list_val_exit"]
 
 
Process finished with exit code 1

 


  • 0

#9 Vad1m198

Vad1m198

    Активный участник

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Вадим


Отправлено 05 декабря 2016 - 10:44

Скорее всего, Вы что-то делаете не так. Либо кликаете не туда, либо кнопка не активна во время клика, либо клик получает другой елемент, который находится поверх нужного... Попробуйте использовать явные ожидания и внимательно посмотрите что происходит с документом во время кликов. Очень трудно гадать не видя документ...


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных