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

Фотография

Поиск объектов на web-странице с помощью XPath


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

#1 mskffo

mskffo

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

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 20 марта 2013 - 12:10

Доброго дня!
Пытаюсь использовать xpath для поиска объектов на web-странице: найти какую-либо ссылку и по ней кликнуть.
Однако столкнулась с ошибкой "EvaluateXPath(...) - есть null или не является объектом".
Эта ошибка возникает в конструкции

var path = '//div[@class="pole fix"]//li/a[text() = "1"]'
Page.EvaluateXPath(path)[0].Click();// Page - любая станица, открытая в explorer'e

даже если в переменную path задать полный путь, который выдает FirePath: "html/body/article/div/div/div[3]/div/div/nav/ul/li[1]/a"


В чем может быть проблема, есть идеи?


  • 0

#2 Rebz

Rebz

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

  • Members
  • PipPipPipPip
  • 471 сообщений


Отправлено 20 марта 2013 - 12:31

Что бросилось в глаза - так это кавычки в var = ' "" '

Попробуйте наоборот, содержимое переменной обрамлять в " ", а внутри - ' '

Попробуйте убрать //li/a[text() = "1" , сначала просто найдите класс pole fix, затем прибавляйте к своей конструкции выражения далее, возможно где-то выражение неверно записано и неверно парсится.
  • 0

#3 modbear

modbear

    Специалист

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

Отправлено 20 марта 2013 - 12:47

В JScript результат функции EvaluateXPath нельзя использовать напрямую, его сначала надо сконвертировать в JScript-массив:

var tmp = Page.EvaluateXPath(path);
if (tmp != null)
{
  var arr = (new VBArray(tmp).toArray());  // <--- конвертируем в JScript-массив
  arr[0].Click();
}

  • 0

#4 mskffo

mskffo

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

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 20 марта 2013 - 17:11

В JScript результат функции EvaluateXPath нельзя использовать напрямую, его сначала надо сконвертировать в JScript-массив:

var tmp = Page.EvaluateXPath(path);
if (tmp != null)
{
  var arr = (new VBArray(tmp).toArray());  // <--- конвертируем в JScript-массив
  arr[0].Click();
}


Не помогло, объекты все равно не находятся, даже если указать полный путь к ним :(
  • 0

#5 Rebz

Rebz

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

  • Members
  • PipPipPipPip
  • 471 сообщений


Отправлено 21 марта 2013 - 06:48

Смущает сообщение ошибке. Page точно существует? Поставьте breakpoint, посмотрите что там за объект, есть ли у него метод EvaluateXPath.
  • 0

#6 modbear

modbear

    Специалист

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

Отправлено 21 марта 2013 - 06:50

А в Firebug или Chrome Developer Tools ваш XPath работает? Т.е. если там в консоли ввести $x('//div[@class="pole fix"]//li/a[text() = "1"]'), то объект находится?
  • 0

#7 mskffo

mskffo

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

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 21 марта 2013 - 06:54

А в Firebug или Chrome Developer Tools ваш XPath работает? Т.е. если там в консоли ввести $x('//div[@class="pole fix"]//li/a[text() = "1"]'), то объект находится?


в FireBuge объект находит так: //div[@class="pole fix"]//li/a[text() = "1"]
  • 0

#8 mskffo

mskffo

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

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

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

Смущает сообщение ошибке. Page точно существует? Поставьте breakpoint, посмотрите что там за объект, есть ли у него метод EvaluateXPath.


Получается что нет такого методаИзображение
  • 0

#9 Kissmybass

Kissmybass

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

  • Members
  • PipPip
  • 98 сообщений


Отправлено 21 марта 2013 - 14:15


Смущает сообщение ошибке. Page точно существует? Поставьте breakpoint, посмотрите что там за объект, есть ли у него метод EvaluateXPath.


Получается что нет такого методаИзображение


Вот чесно скажу, не связываетесь вы с этим методом, в ТестКомплите и без того хватает средств для поиска объектов.
  • 0

#10 mskffo

mskffo

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

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 29 марта 2013 - 06:52

В продолжение темы или может уже не в тему:
может кто знает, как найти через xpath объект, у которого id формируется динамически при каждом переходе на страницу по шаблону : "sel<3-4 произвольных символа>_chzn". Можно ли использовать какой-либо символ (типа "*"), указывающий на произвольное количество символов в значении id ?
  • 0

#11 modbear

modbear

    Специалист

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

Отправлено 01 апреля 2013 - 07:00

может кто знает, как найти через xpath объект, у которого id формируется динамически при каждом переходе на страницу по шаблону : "sel<3-4 произвольных символа>_chzn".

Попробуйте так:
//*[starts-with(@id, 'sel') and substring(@id, string-length(@id)-4) = '_chzn']

  • 0

#12 mskffo

mskffo

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

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 02 апреля 2013 - 04:44

может кто знает, как найти через xpath объект, у которого id формируется динамически при каждом переходе на страницу по шаблону : "sel<3-4 произвольных символа>_chzn".

Попробуйте так:
//*[starts-with(@id, 'sel') and substring(@id, string-length(@id)-4) = '_chzn']


так тоже не получилось, null возвращается
  • 0


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

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