2012-01-28 4 views
2

В настоящее время я использую Selenium 2 с локальным веб-сервером Selenium и PHP-Webdriver written by Facebook.Переключение между кадрами в Selenium 2 с PHP-Webdriver

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

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

ответ

2

Python WebDriver клиент имеет эти методы для переключения между окнами iframe, используются и всплывающие окна:

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/сеанс /: SESSIONID/кадр

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

+0

метод 'switch_to_default_content' не реализован, но благодарит за сообщение Update ^^. Оно работает. –

1

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

//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); 
    } 
Смежные вопросы