Переключение между кадрами в Selenium 2 с помощью PHP-Webdriver


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

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

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

Author: Stephan Kulla, 2012-01-28

2 answers

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

switch_to_active_element
switch_to_alert
switch_to_default_content
switch_to_frame
switch_to_window 

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


ОБНОВЛЕНИЕ: Поскольку вы упомянули JasonWireProtocol:

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

СООБЩЕНИЕ/сеанс/:идентификатор сеанса/кадр

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

 2
Author: Misha Akovantsev, 2012-01-28 06:58:46

У меня была такая же проблема. Проблема, которую я обнаружил, заключается в том, что "фрейм" в веб-драйверах 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);
    }
 1
Author: Dustin, 2012-08-20 20:48:52