使用PHP-Webdriver在Selenium 2中的帧之间切换

时间:2012-01-28 00:58:25

标签: php selenium selenium-webdriver webdriver

我目前将Selenium 2与本地Selenium网络服务器和PHP-Webdriver written by Facebook一起使用。

现在我想为Facebook Like Button编写一个自动化测试。因为这个Button是通过iframe加载的,所以我首先通过$driver->frame(array('id' => 1))选择这个框架(我发现,Facebook正常加载两帧,第二帧是Like按钮)。单击Like按钮后,将加载一个新框架,用户也可以在其中发送评论。不幸的是,焦点仍然在Like按钮框架上,所以我必须切换到第二帧。我怎么能这样做?

因为我不使用Selenium RC,所以没有Selenium.SelectFrame("relative=top")方法。我也不能使用方法driver.switchTo().defaultContent()因为我不使用Java webdriver。我似乎只能使用JsonWireProtocol中指定的方法。如何在帧之间切换或将焦点更改回顶部框架?

2 个答案:

答案 0 :(得分: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客户端模拟。


更新: 既然你提到了JasonWireProtocol:

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

  

POST / session /:sessionId / frame

     

将焦点更改为页面上的另一个框架   如果帧ID为空,则服务器应切换到页面的默认内容。

答案 1 :(得分:1)

我有同样的问题。我发现的问题是,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);
    }