Selenium Webdriver — PageObject и указатель драйвера

Я делаю тестовый набор в Selenium Webdriver с использованием PageObjects, но я сомневаюсь, что экземпляр, на который ссылается WebElement, может работать, даже если драйвер указывает на другой фрейм? На сайте, для которого я пишу тесты, много фреймов (и нет, я не могу перестать использовать фреймы :-)) и один элемент фрейма на каждом сайте — это верхняя панель. Я хотел бы создать один объект PageObject для этого фрейма, который я могу инициализировать и использовать из других объектов PageObject, которые его содержат.

НО я сомневаюсь, что вы можете использовать WebElements, когда драйвер перешел на другой кадр.

Пример:

  1. Создайте и инициализируйте новый PageObject HomePage
  2. Переключиться на (кадр1). Переключить на (кадр2)
  3. Из конструктора создайте объект TopBar, который инициализирует/создает экземпляры элементов, используя расположение драйвера выше. Теперь у меня есть ссылка на WebElement в этом PageObject/frame с именем elmTopBar.
  4. На домашней странице драйвер переключается с этого фрейма (назад на фрейм0), выполняет какую-то другую работу.

  5. Будет ли моя «старая» ссылка на elmTopBar по-прежнему работать из этого местоположения драйвера (тот же объект драйвера) или я буду работать только тогда, когда драйвер каждый раз указывает на frame2 (это означает, что я должен переключаться + инициализировать объект TopBar каждый раз, когда домашней странице нужно что-то в Верхняя панель)?

Я знаю, что если я выполняю поиск элемента из другого фрейма, он не найдет объекты в другом фрейме, но мой вопрос заключается в том, что когда вы делаете/сохраняете ссылку на WebElement, остается ли он работоспособным «навсегда» даже после выполнения switchTo (frameX ) с водителем.

Спасибо заранее!


person Martin Aas Andersen    schedule 18.12.2012    source источник


Ответы (1)


Нет. Вам придется каждый раз «повторно находить» объект. Selenium, вероятно, будет жаловаться, что объект больше не находится в кеше или не привязан к DOM.

person Arran    schedule 18.12.2012
comment
Я согласен с этим. Я пытался обойти это, но безуспешно. Кроме того, я обнаружил, что Firefox кажется более придирчивым к фреймам, и мне иногда нужно использовать исполнителя Javascript для элементов внутри фреймов при использовании Firefox. - person djangofan; 21.03.2013