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

Фотография

Selenium WebDriver python: Unable to locate element

selenium python locate

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

#1 Admroll

Admroll

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

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


Отправлено 01 февраля 2016 - 13:29

Добрый день

 

Знаю, тема уже много раз везде обсуждалась, но, к сожалению, найденные решения не помогают.

 

Имеется 2 iframe, в первом из них нужно выбрать поле и отправить в него значение.

 

Не удается локализовать первый iframe

<!DOCTYPE html>
<html lang="ru">
<head>
<body class
<div class="xxx1>
<iframe id="example_Id_1" frameborder="0" name="example_Name" src="xxxx">
<div class="input-icon fonted"> </div>
<input id="SomeThing" type="text" ect>
</div>
<div class="xxxx2" data-target="xxx">
<iframe id="example_Id_2" frameborder="0" name="example_name_2" src="xxx">
</body>
</html>

Какие варианты пробовались:

1.

browser.switch_to.frame(browser.find_element_by_tag_name('iframe'))

Ошибка:

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"tag name","selector":"iframe"}

2.

browser.switch_to_frame(browser.find_element_by_id("example_Id_1"))

Ошибка:

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"id","selector":"example_Id_1"}

3.

iframe = WebDriverWait(browser, 5).until(EC.presence_of_element_located((By.TAG_NAME, "iframe")))
browser.switch_to.frame(iframe)[0]

Ошибка:

raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
4.

iframe = WebDriverWait(browser, 5).until(EC.presence_of_element_located((By.ID, "example_id_1")))
browser.switch_to.frame(iframe)

Ошибка
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:

5.

element = browser.find_element(by=By.ID, value="example_id_1")
browser.switch_to.frame(element)

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"id","selector":"example_id_1"}
 

Need help :(


  • 0

#2 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 01 февраля 2016 - 13:44

Но у вас же в примере кода страницы написано что первый id без цифр - id="example_Id"

а вы ищете везде example_Id_1


  • 0

#3 Admroll

Admroll

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

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


Отправлено 01 февраля 2016 - 13:48

Но у вас же в примере кода страницы написано что первый id без цифр - id="example_Id"

а вы ищете везде example_Id_1

 

Спасибо, исправлю, чтобы не сбивало с толку. это пример id`шника, он в оригинале отличается и везде одинаковый


  • 0

#4 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 01 февраля 2016 - 14:05

Какой браузер и селениум используете?


  • 0

#5 Admroll

Admroll

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

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


Отправлено 01 февраля 2016 - 14:15

Какой браузер и селениум используете?

Firefox 43.0.4

Google Chrome Version 48.0.2564.82

Selenium 2.50


  • 0

#6 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 01 февраля 2016 - 14:47

А попробуйте так:

        driver.switchTo().defaultContent();
        driver.switchTo().frame("example_Id_1");

  • 0

#7 Admroll

Admroll

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

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


Отправлено 01 февраля 2016 - 15:10

 

А попробуйте так:

        driver.switchTo().defaultContent();
        driver.switchTo().frame("example_Id_1");

Ошибка:

browser.switchTo().defaultContent();
AttributeError: 'WebDriver' object has no attribute 'switchTo'


  • 0

#8 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 01 февраля 2016 - 15:24

ну, я же пример привёл, вам надо заменить на своё

switch_to

и посмотреть есть там defaultContent и использовать это.

и после просто переключиться по имени на фрейм


  • 1

#9 leftCh

leftCh

    Постоянный участник

  • Members
  • PipPipPip
  • 179 сообщений

Отправлено 01 февраля 2016 - 17:08

Ваш html пример подозрительно невалиден.  Я надеюсь вы свою программу не на нем отлаживаете? 


  • 0

#10 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 02 февраля 2016 - 07:24

 

 

А попробуйте так:

        driver.switchTo().defaultContent();
        driver.switchTo().frame("example_Id_1");

Ошибка:

browser.switchTo().defaultContent();
AttributeError: 'WebDriver' object has no attribute 'switchTo'

 

drviver.switch_to_default_content()
drviver.switch_to_frame("example_Id_1")

  • 0

#11 Admroll

Admroll

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

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


Отправлено 02 февраля 2016 - 08:43

Ваш html пример подозрительно невалиден.  Я надеюсь вы свою программу не на нем отлаживаете? 

это для примера, чтобы было видно структуру вложенности

 

Решение найдено:

browser.switch_to.default_content()
browser.switch_to.window(browser.window_handles[1])
iframe = browser.find_element_by_id("example_id_1")
browser.switch_to.frame(iframe)
wait.until(EC.presence_of_element_located((By.ID, "SomeThing")))

Спасибо за помощь!


  • 0



Темы с аналогичным тегами selenium, python, locate

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

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