我目前将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中指定的方法。如何在帧之间切换或将焦点更改回顶部框架?
答案 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);
}