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

Фотография

Не получается кликнуть правильную ссылку


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

#1 jurteg

jurteg

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

  • Members
  • Pip
  • 61 сообщений
  • ФИО:Serhii Zharskyi

Отправлено 27 мая 2010 - 13:14

В общем на странице есть одна и та же ссылка в двух экземплярах: одна из ссылок постоянно присутствует на странице, другая только на некоторых. Мне нужно кликнуть на ссылку, которая появится в определённой области страницы. Вот сюда мне нужно кликнуть:
Изображение
Количество <li> может произвольно меняться, так что я не знаю в каком по счёту будет моя ссылка.
такие варианты работать не хотят:
selenium.Click("//html/body/div/div/div/ul/li/div/h2/a[contains(@href, './article/"+ articleName +"/')]");
или такое
selenium.IsElementPresent("//html/body/div/div/div/a[text()='./article/" + articleName + "/')]");
Моя ссылка находится в одном из <li> в этом <ul>, мне нужно кликнуть именно её:
Изображение

Эта ссылка постоянно присутствует на странице:
Изображение

Нужен способ не кликнуть вторую ссылку при отсутствии первой.
Извините, если непонятно описал.
  • 0

#2 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 27 мая 2010 - 14:40

Попробуйте:

//h2/a[text()='rivoroh']
  • 0

#3 jurteg

jurteg

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

  • Members
  • Pip
  • 61 сообщений
  • ФИО:Serhii Zharskyi

Отправлено 27 мая 2010 - 14:57

Попробуйте:

//h2/a[text()='rivoroh']

Таким образом получилось, стыдно, что не додумался.

Я сделал таким образом, хотя это не совсем то, что мне нужно:
if (selenium.IsElementPresent("//html/body/div/div/div/ul/li[" + i + "]/div/h2/a[contains(@href, '" + articleCapture + "')]"))
						{
							selenium.Click("//html/body/div/div/div/ul/li[" + i + "]/div/h2/a[contains(@href, '" + articleCapture + "')]");
							selenium.WaitForPageToLoad("30000");
						 }
Такое прокатит, если знать хотя бы максимальное количество <li>.
Может есть какой-то способ, чтобы задать относительный путь к элементу, к примеру в каком-нибудь конкретном <div>, если в <div> есть другие вложения?
  • 0

#4 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 27 мая 2010 - 15:40

Для получения количества элементов в данном случае попробуйте использовать getXPathCount. Как-то так:

getXPathCount( "//div[@id='content']//li" )

Должно сработать.

И старайтесь оптимизировать XPath, а то вы всю иерархию тянете, хотя этого не нужно. Нужна только небольшая часть
  • 0

#5 barancev

barancev

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

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


Отправлено 27 мая 2010 - 16:20

И старайтесь оптимизировать XPath, а то вы всю иерархию тянете, хотя этого не нужно. Нужна только небольшая часть

"Оптимизация" бывает разная :)
Если написать XPath, который "тянет всю иерархию", он работает быстрее, чем "короткий" запрос типа //div[@id='myBlock']//li
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#6 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 27 мая 2010 - 16:34

И старайтесь оптимизировать XPath, а то вы всю иерархию тянете, хотя этого не нужно. Нужна только небольшая часть

"Оптимизация" бывает разная :)
Если написать XPath, который "тянет всю иерархию", он работает быстрее, чем "короткий" запрос типа //div[@id='myBlock']//li

Пожалуй, это будет его единственное преимущество.
  • 0


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

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