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

Фотография

Python+selenium


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

#1 Sckatik

Sckatik

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

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Иванов

Отправлено 24 марта 2013 - 20:03

Всем добрый вечер. Есть такая конструкция:
<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()

пытался и по айди и по тексту элемента и как только не пытался. Не находит нужный элемент.
Просмотрел через Firebug этот элемент существует.

выдает ошибку:

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"}'


Не могу понять что я делаю не так. Понимаю что не находит элемент. Пробывал и по другому и по id дива. ничего не получается. Помогите советом
  • 0

#2 stupid

stupid

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

  • Members
  • Pip
  • 14 сообщений
  • Город:Новосибирск

Отправлено 25 марта 2013 - 05:50

Если на странице несколько фреймов, нужно переключиться во фрейм, содержащий элемент.
  • 0

#3 nuc

nuc

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

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Андрей
  • Город:Украина

Отправлено 25 марта 2013 - 07:03

По такому xpath
driver.find_element_by_xpath("//button[@type='button']").click()
вы нужную кнопку не нажмете.
Попробуйте найти нужный div, а затем нужную кнопку. Что-то вроде такого:
driver.find_element_by_xpath("//div[@id='div_zfzMRJxiSIu']/button").click()

  • 0

#4 sawoy

sawoy

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

  • Members
  • Pip
  • 51 сообщений
  • ФИО:Alex Savchuk

Отправлено 25 марта 2013 - 09:45

Какой именно элемент не находит - кнопку или сам див ?
Текст ошибки и эксепшн какой?

Попробуйте:

div = driver.find_element_by_id("div_zfzMRJxiSIu")
div.click()
// если элемент динамический, то найдите его снова
// div = driver.find_element_by_id("div_zfzMRJxiSIu")
button = div.find_element_by_xpath(".//button[@type='button']")
button.click()

  • 0

#5 Sckatik

Sckatik

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

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Иванов

Отправлено 25 марта 2013 - 21:29

Поставил таймаут и воспользовался Вашими подсказками все заработало. Я так понял без таймаута не получится никак сделать? перед каждым элементом приходится писать его.
  • 0

#6 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 26 марта 2013 - 06:35

https://blog.mozilla...-webdriverwait/
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#7 Sckatik

Sckatik

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

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Иванов

Отправлено 03 апреля 2013 - 22:15

С этим примером разобрался. Сейчас возникла задача в другом:
<div>
	<div></div>
	<input></input>
	<span>
		<div>
<span>текст1</span>
</div>
		<div>
			<input></input>
</div>
</span>
	<span>
		<div>
<span>test2</span>
</div>
<div>
			[color="#8B0000"]<input></input>[/color]
</div>
</span>
	<span>
		<div>
<span>текст3</span>
</div>
		<div>
			<input></input>
</div>
</span>
</div>

Нельзя использовать порядковые номер нод.

Тот инпут который помечен цветом нужно туда ввести какой то текст

Делаю так:
input=browser.find_element_by_xpath("//div/span[text()= 'test2']/div/input");
input.send_keys('Тест')
Не находит элемент. Если просто найти span то все ок находит. Но как достучатся до инпута?
Подскажите. Как правильней составить xpath.
  • 0


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

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