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

Фотография

Работа с JS


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

#1 Yura94

Yura94

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

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

Отправлено 04 июля 2011 - 12:04

Ребята, подскажите как через вебдрайвер искать элементы сформированные javascript.

java
driver.findElements(By.cssSelector("a[class="link"]"));
Типа такого не прокатывает.
  • 0

#2 barancev

barancev

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

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


Отправлено 04 июля 2011 - 12:18

Во-первых, кавычки неправильно расставлены, надо пофиксить это.
Во-вторых, для селена нет разницы, как было сформирован элемент, джаваскриптом или из исходного html-кода -- он работает с DOM.
Либо элемент есть, либо его нет. Если его нет -- возможно, Вы просто слишком рано начали искать, надо было подождать немного.

Ждать можно по разному. Самое простое -- задержка.
Но более правильно ждать появления элемента.
В selenium 2.0 для этого существует два различных механизма -- эксплицитные ожидания на клиентской стороне (фактически просто цикл, в котором периодически выполняется некоторая проверка) и имплицитные ожидания на стороне браузера, специально для ожидания появления элементов.
Примеры смотреть тут, в самом начале страницы: http://seleniumhq.or...r_advanced.html
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#3 Yura94

Yura94

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

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

Отправлено 04 июля 2011 - 16:29

Респект. Сделал как ты написал через цикл.
  • 0

#4 Yura94

Yura94

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

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

Отправлено 06 июля 2011 - 06:50

А еще вопрос. А почему не ищет через сssSelektor Unable to find element using css, в цикле заглючило. Тоже нужно задержку ставить? Какой-то глючный этот веюдрайвер.
  • 0

#5 VitalyD

VitalyD

    Опытный участник

  • Members
  • PipPipPipPip
  • 285 сообщений
  • Город:Санкт-Петербург

Отправлено 06 июля 2011 - 07:50

Поколение Next во всей красе :)
  • 0

#6 appmen

appmen

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

Отправлено 07 июля 2011 - 07:42

Поколение Next во всей красе :)

странное умозаключение
  • 0

#7 dinas

dinas

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

  • Members
  • Pip
  • 52 сообщений
  • Город:Минск

Отправлено 07 июля 2011 - 09:16

странное умозаключение


А я поддержу VitalyD
  • 0

#8 appmen

appmen

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

Отправлено 07 июля 2011 - 12:01

А я поддержу VitalyD

:unknw: :unknw: :unknw:
  • 0

#9 barancev

barancev

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

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


Отправлено 07 июля 2011 - 13:08

:unknw: :unknw: :unknw:

А Вы не удивляйтесь, а попробуйте ответить на вопрос "А почему не ищет через сssSelektor Unable to find element using css, в цикле заглючило. Тоже нужно задержку ставить?" :)


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

#10 appmen

appmen

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

Отправлено 07 июля 2011 - 14:07

А Вы не удивляйтесь, а попробуйте ответить на вопрос "А почему не ищет через сssSelektor Unable to find element using css, в цикле заглючило. Тоже нужно задержку ставить?" :)

Ну, я не понял вопроса. Но у меня малый опыт работы с Селениумом, поэтому списал на незнание. Я не знаю в чём комичность этого вопроса
  • 0

#11 Yura94

Yura94

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

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

Отправлено 07 июля 2011 - 22:07

Поколение Next во всей красе :)

Да, я такой )

Дело в том что с JS понятно, ему нужно выполнится но с cssSelector'ом почему пишет что не найден элемент, а он есть. В цикле сначала выполняется а потом выдает ошибку. Что селениуму вообще пофиг загрузил он страницу полностью или нет? Просто получается так.
  • 0

#12 barancev

barancev

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

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


Отправлено 07 июля 2011 - 22:39

Что селениуму вообще пофиг загрузил он страницу полностью или нет? Просто получается так.

Совершенно верно, Selenium API 2.0 -- асинхронный интерфейс. Если нужны ожидания -- надо использовать один из двух вышеупомянутых механизмов (ну или свой реализовать).
Что Вам надо сделать-то? Дождаться появления элемента, после чего произвести над ним какие-то действия?

Вот первый способ ожидания (эксплицитный):
private WebElement waitElementDisplayed(final By locator) {
		return new WebDriverWait(driver, 30).until(new ExpectedCondition<WebElement>() {
			@Override
			public WebElement apply(WebDriver d) {
				WebElement e = d.findElement(locator);
				return e.isDisplayed() ? e : null;
			}
		});
	}

Использовать, соответственно, вот так:
waitElementDisplayed(By.cssSelector("div#test")).click();


Второй способ ожидания (имплицитный) фактически просто делает интерфейс Selenium синхронным:
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
		driver.findElement(By.cssSelector("div#test")).click();

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

#13 VitalyD

VitalyD

    Опытный участник

  • Members
  • PipPipPipPip
  • 285 сообщений
  • Город:Санкт-Петербург

Отправлено 08 июля 2011 - 09:39

оффтопик:

Алексей, вопрос во сновном к вам как к гуру. Откуда такое идиотское название для класса By???? Как вообще додумались до такого:) Не знаете?
  • 0

#14 barancev

barancev

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

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


Отправлено 08 июля 2011 - 11:07

Алексей, вопрос во сновном к вам как к гуру. Откуда такое идиотское название для класса By???? Как вообще додумались до такого:) Не знаете?

Это как бы легко читаемый стиль :)
"find element by id my_element" => driver.findElement(By.id("my_element"));
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium


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

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