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

Фотография

проблема отправки параметра в функцию ElementPresent


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

#1 yanBATYA

yanBATYA

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

  • Members
  • Pip
  • 4 сообщений
  • Город:Таганрог

Отправлено 20 июня 2012 - 07:31

В моем тесте мне необходимо проверить наличие конкретной ячеки таблицы на странице, а конкретнее: //table[@id='Table2']/tbody/tr/td/table/tbody/tr/td[2]/center/table/tbody/tr[3]/td/table[2]/tbody/tr[3]/td[3]

В Selenium IDE есть функция verifyElementPresent к которой можно обратиться из runScript как к selenium.isElementPresent('locator').

Мне это необходимо для выполнения кода storeEval | if (selenium.isElementPresent('ячейка таблицы') == true){'storeAnswC'} else {'logging'} | nextMove

Локатор в представленном выше виде не воспринимается функцией Selenium'a , на что отвечает Threw an exception: missing ) after argument list если делаю так:

if (selenium.isElementPresent('//table[@id='Table2']/tbody/tr/td/table/tbody/tr/td[2]/center/table/tbody/tr[3]/td/table[2]/tbody/tr[3]/td[3]') == true){'storeAnswC'} else {'logging'}



Помогите разобраться как правильно сообщить этот локатор
  • 0

#2 SANDR

SANDR

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

  • Members
  • Pip
  • 47 сообщений
  • Город:Омск

Отправлено 20 июня 2012 - 08:53

Мне это необходимо для выполнения кода storeEval | if (selenium.isElementPresent('ячейка таблицы') == true){'storeAnswC'} else {'logging'} | nextMove

В блоке условия, судя по всему, лишнее "== true", если попробовать так?
if (selenium.isElementPresent('ячейка таблицы')){'storeAnswC'} else {'logging'} | nextMove

  • 0

#3 yanBATYA

yanBATYA

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

  • Members
  • Pip
  • 4 сообщений
  • Город:Таганрог

Отправлено 20 июня 2012 - 09:46



Мне это необходимо для выполнения кода storeEval | if (selenium.isElementPresent('ячейка таблицы') == true){'storeAnswC'} else {'logging'} | nextMove

В блоке условия, судя по всему, лишнее "== true", если попробовать так?
if (selenium.isElementPresent('ячейка таблицы')){'storeAnswC'} else {'logging'} | nextMove


Нет, все правильно с true. Но на всякий случай проверил, не помогает.

Дело имено в том как правильно написать локатор ячейки таблицы и сообщить в функцию ElementPresent
  • 0

#4 SANDR

SANDR

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

  • Members
  • Pip
  • 47 сообщений
  • Город:Омск

Отправлено 20 июня 2012 - 10:39

Нет, все правильно с true. Но на всякий случай проверил, не помогает.

Дело имено в том как правильно написать локатор ячейки таблицы и сообщить в функцию ElementPresent


У меня есть примерно такой же тест, выглядит так
[info] Executing: |open | http://сайт/ | |
[info] Executing: |storeEval | if (selenium.isElementPresent('//strong/a')) {nextStep='testOK'} else{nextStep='testNotOK'} | test |
[info] script is: if (selenium.isElementPresent('//strong/a')==true) {nextStep='testOK'} else{nextStep='testNotOK'}
[info] Executing: |gotolabel | ${test} | |
[info] Executing: |echo | Не нашел я ничего | |
[info] echo: Не нашел я ничего
[info] Executing: |STOP | | |
[error] Unknown command: 'STOP'

Суть в нахождении имени при авторизации, если пользователь авторизован - пропускаем идем дальше, если нет, проверяем по Xpath элемент и авторизовываемся - как то так.
Работает прекрасно.
Дополнения соответствуюущие конечно же тоже установлены? (goto_sel_ide.js)

Пробуйте локатор изменять, мне кажется проблема именно в его определении, может стоит искать по CSS, LINK или как то иначе
  • 0

#5 yanBATYA

yanBATYA

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

  • Members
  • Pip
  • 4 сообщений
  • Город:Таганрог

Отправлено 20 июня 2012 - 11:57


Нет, все правильно с true. Но на всякий случай проверил, не помогает.

Дело имено в том как правильно написать локатор ячейки таблицы и сообщить в функцию ElementPresent


У меня есть примерно такой же тест, выглядит так
[info] Executing: |open | http://сайт/ | |
[info] Executing: |storeEval | if (selenium.isElementPresent('//strong/a')) {nextStep='testOK'} else{nextStep='testNotOK'} | test |
[info] script is: if (selenium.isElementPresent('//strong/a')==true) {nextStep='testOK'} else{nextStep='testNotOK'}
[info] Executing: |gotolabel | ${test} | |
[info] Executing: |echo | Не нашел я ничего | |
[info] echo: Не нашел я ничего
[info] Executing: |STOP | | |
[error] Unknown command: 'STOP'

Суть в нахождении имени при авторизации, если пользователь авторизован - пропускаем идем дальше, если нет, проверяем по Xpath элемент и авторизовываемся - как то так.
Работает прекрасно.
Дополнения соответствуюущие конечно же тоже установлены? (goto_sel_ide.js)

Пробуйте локатор изменять, мне кажется проблема именно в его определении, может стоит искать по CSS, LINK или как то иначе


Спасибо, с подбором другого типа локатора понятно. А какой бы вы выбирали локатор на сайте с табличной версткой на предмет какого либо текста в определенном блоке таблицы ?
  • 0

#6 SANDR

SANDR

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

  • Members
  • Pip
  • 47 сообщений
  • Город:Омск

Отправлено 21 июня 2012 - 01:32

Спасибо, с подбором другого типа локатора понятно. А какой бы вы выбирали локатор на сайте с табличной версткой на предмет какого либо текста в определенном блоке таблицы ?


Я почти всегда использую Xpath:Position или ID если элементов на странице не много. Если текст на странице уникальный, то можно и по тексту искать. Все зависит от того что надо и проверить что найти
  • 0

#7 psihozik

psihozik

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

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

Отправлено 21 июня 2012 - 07:45

Локатор в представленном выше виде не воспринимается функцией Selenium'a , на что отвечает Threw an exception: missing ) after argument list если делаю так:

if (selenium.isElementPresent('//table[@id='Table2']/tbody/tr/td/table/tbody/tr/td[2]/center/table/tbody/tr[3]/td/table[2]/tbody/tr[3]/td[3]') == true){'storeAnswC'} else {'logging'}



Помогите разобраться как правильно сообщить этот локатор

В данном примере проблема не в локаторе а в способе записи, надо так:
if (selenium.isElementPresent("//table[@id='Table2']/tbody/tr/td/table/tbody/tr/td[2]/center/table/tbody/tr[3]/td/table[2]/tbody/tr[3]/td[3]") == true){'storeAnswC'} else {'logging'}

Из за того, что вы используете одинаковые внешние и внутренние кавычки селениум думает что вы перечисляете аргументы:
'//table[@id=' - 1 строка
Table2- что то не в кавычках
']/tbody/tr/td/table/tbody/tr/td[2]/center/table/tbody/tr[3]/td/table[2]/tbody/tr[3]/td[3]' - другая строка
  • 0

#8 yanBATYA

yanBATYA

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

  • Members
  • Pip
  • 4 сообщений
  • Город:Таганрог

Отправлено 21 июня 2012 - 10:57

В данном примере проблема не в локаторе а в способе записи, надо так:
if (selenium.isElementPresent("//table[@id='Table2']/tbody/tr/td/table/tbody/tr/td[2]/center/table/tbody/tr[3]/td/table[2]/tbody/tr[3]/td[3]") == true){'storeAnswC'} else {'logging'}

Из за того, что вы используете одинаковые внешние и внутренние кавычки селениум думает что вы перечисляете аргументы:
'//table[@id=' - 1 строка
Table2- что то не в кавычках
']/tbody/tr/td/table/tbody/tr/td[2]/center/table/tbody/tr[3]/td/table[2]/tbody/tr[3]/td[3]' - другая строка


Спасибо, это помогло :-)
  • 0


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

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