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

Фотография

Поиск элементов при помощи FirePath на CGI странице

xpath FirePath cgi

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

#1 Stolz

Stolz

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

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

Отправлено 21 марта 2016 - 06:45

Добрый день.

 

Возник такой вопрос: как найти элемент CGI страницы при помощи xpath?

 

Смущает следующее:

1. Если будем смотреть на HTML страницу (при помощи FireBug), то видим полный набор элементов (скрин "html_page.jpg"):

9d65b3a9c090.jpg

В данном варианте рекордер Селениума может определить кнопку и по name ("cert_subject") и по xpath.

 

2. Если же посмотрим на туже страницу через FirePath, то увидим только верхние элементы фреймов страницы (скрин "firepath_page.jpg"):

a5dc7707efce.jpg

и здесь уже кнопка не находится.

 

При запуске теста, несмотря на то, что рекордер при записи кнопку нашел, тест не проходит по причине того, что не может найти кнопку.

 

Можно каким-то образом найти данную кнопку?

Почему FirePath видит только блоки фреймов, но не видит то, что в них спрятано?

Прикрепленные файлы

  • Прикрепленный файл  html_page.jpg   39,75К   0 Количество загрузок:
  • Прикрепленный файл  firepath_page.jpg   69,44К   0 Количество загрузок:

  • 0
You can't see us, we can see you.

#2 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 21 марта 2016 - 08:16

Потому что нужно переключаться во фреймы.

 

switch_to_frame. Но я не знаю реализовано ли это в IDE.

 

Если ты имеешь ввиду переключение в FIREPATH, то тебе в селектбоксе где написано TOP WINDOW надо выбрать нужный фрейм


  • 0

#3 TatyanaV

TatyanaV

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

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 22 марта 2016 - 14:21

switch_to_frame. Но я не знаю реализовано ли это в IDE.

Переключение по фреймам есть и в IDE.

Во всяком случае, когда я начинала его изучать - оно там было, вряд ли убрали за это время.


  • 0

#4 Stolz

Stolz

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

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

Отправлено 23 марта 2016 - 08:26

Я правильно понимаю, что под switch_to_frame, понимаеются конструкция вот такого вида:

driver.switchTo().frame("FrameVMENU");

?


  • 0
You can't see us, we can see you.

#5 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 23 марта 2016 - 08:57

Я правильно понимаю, что под switch_to_frame, понимаеются конструкция вот такого вида:

driver.switchTo().frame("FrameVMENU");

?

да


  • 0

#6 Stolz

Stolz

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

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

Отправлено 23 марта 2016 - 09:28

Есть вот такой кусок теста:

    driver.switchTo().frame("FrameVMENU");
    driver.findElement(By.linkText("Поиск издателей")).click();
    driver.switchTo().frame("FrameMAIN");
    driver.switchTo().frame("FrameVMENUcerts");
    driver.findElement(By.xpath("//input[@name='cert_subject']"));

 

первый и второй шаг проходит, а вот на "driver.switchTo().frame("FrameMAIN");" - падает, т.к. не видит данный фрейм.

 

Вот, что есть в логе:

org.openqa.selenium.NoSuchFrameException: No frame element found by name or id FrameMAIN
Build info: version: '2.52.0', revision: '4c2593c', time: '2016-02-11 19:06:42'
System info: host: 'WS-KB-CRYPTO005', ip: '192.168.56.1', os.name: 'Windows 10', os.arch: 'x86', os.version: '10.0', java.version: '1.8.0_73'
Driver info: driver.version: unknown
    at org.openqa.selenium.remote.RemoteWebDriver$RemoteTargetLocator.frame(RemoteWebDriver.java:997)
    at com.example.tests.TestsUI.testUntitled(TestsUI.java:30)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
 


  • 0
You can't see us, we can see you.

#7 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 23 марта 2016 - 09:40

попробуй сделать switch_to_default_content, а после этого переключится на тот, который тебе нужно

driver.switchTo().defaultContent();
driver.switchTo().frame("FrameMAIN");

и это в общем то правильно, ведь во FrameVMENU нет фрейма FrameMAIN


  • 0

#8 Stolz

Stolz

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

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

Отправлено 23 марта 2016 - 10:21

попробуй сделать switch_to_default_content, а после этого переключится на тот, который тебе нужно

driver.switchTo().defaultContent();
driver.switchTo().frame("FrameMAIN");

и это в общем то правильно, ведь во FrameVMENU нет фрейма FrameMAIN

Здесь прошло, но споткнулся на втором фрейме, сделал по аналогии:

    driver.switchTo().defaultContent();
    driver.switchTo().frame("FrameMAIN");
    driver.switchTo().defaultContent();
    driver.switchTo().frame("FrameVMENUcerts");


  • 0
You can't see us, we can see you.

#9 TatyanaV

TatyanaV

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

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 23 марта 2016 - 10:38

У Вас на скриншоте того, что считается "defaultContent" - всего 3 фрейма: FrameVMENU, FrameVMAIN и footer.

Если это не опечатка и где-то все же есть фрейм "FrameVMENUcerts" (по первому скрину - нельзя сделать однозначный вывод, т.к. кусок кода явно не целиком приведен), то переключаться в его надо из того фрейма, в котором он находится.

К примеру, он может быть внутри FrameVMENU.

Тогда у вас между переключением в defaultContent и переключением на FrameVMENUcerts > должно быть переключение во фрейм "FrameVMENU".


  • 0

#10 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 23 марта 2016 - 11:10

"defaultContent" - это HTML страница в целом(куда входят и фреймы)


  • 0

#11 Stolz

Stolz

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

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

Отправлено 23 марта 2016 - 11:24

Спасибо.

Внутрь фреймов провалился, элементы смог там локализовать - буду дальше "воевать". :)


  • 0
You can't see us, we can see you.



Темы с аналогичным тегами xpath, FirePath cgi

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

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