Переключение между фреймами в Selenium 2 с помощью PHP-Webdriver - PullRequest
2 голосов
/ 28 января 2012

В настоящее время я использую Selenium 2 с локальным веб-сервером Selenium и PHP-веб-драйвером , написанным Facebook .

Теперь я хочу написать автоматический тест для Facebook Like Button . Поскольку эта кнопка загружается через iframe, я сначала выбираю этот кадр с помощью $driver->frame(array('id' => 1)) (я обнаружил, что Facebook обычно загружает два кадра, а второй - кнопка «Мне нравится»). После нажатия кнопки «Нравится» загружается новый фрейм, где пользователь также может отправить комментарий к своей стене. К сожалению, фокус по-прежнему находится на кадре кнопки «Мне нравится», поэтому мне нужно переключиться на второй кадр. Как я могу это сделать?

Поскольку я не использую Selenium RC, метод Selenium.SelectFrame("relative=top") отсутствует. Я также не могу использовать метод driver.switchTo().defaultContent(), потому что я не использую веб-драйвер Java. Кажется, что я просто могу использовать методы, указанные в JsonWireProtocol . Как я могу переключаться между кадрами или менять фокус на верхнюю рамку?

Ответы [ 2 ]

2 голосов
/ 28 января 2012

Клиент веб-драйвера Python имеет следующие методы для переключения между фреймами, окнами и всплывающими окнами:

switch_to_active_element
switch_to_alert
switch_to_default_content
switch_to_frame
switch_to_window 

switch_to_default_content это то, что вам нужно. Найдите свой аналог для php клиента.


UPDATE: Поскольку вы упомянули JasonWireProtocol:

http://code.google.com/p/selenium/wiki/JsonWireProtocol#/session/:sessionId/frame

POST / session /: sessionId / frame

Сменить фокус на другой кадр на странице.
Если идентификатор фрейма равен нулю, сервер должен переключиться на содержимое страницы по умолчанию.

1 голос
/ 21 августа 2012

У меня была такая же проблема. Проблема, которую я обнаружил, заключается в том, что «фрейм» в веб-драйверах PHP переключается только на фреймы ниже текущего. Поэтому, если вы хотите переключиться на другой кадр, который находится над текущим кадром, вам не повезло. Мне пришлось выбрать главное окно, которое по сути сбрасывает меня в верхнюю рамку. Оттуда я смог выбрать правильный кадр.

//putting a sleep so the page can load
sleep(SLEEPTIME + 5);
//getting a list of windows on the page
$windows = $webdriver->getWindows(); // function below

//switching to the 
$webdriver->selectWindow($windows[0]);

$webdriver->focusFrame('cpAppFrame');

public function getWindows() {
        $request = $this->requestURL . "/window_handles";
        $response = $this->execute_rest_request_GET($request);
        return $this->extractValueFromJsonResponse($response);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...