зеркало из https://github.com/mozilla/gecko-dev.git
Bug 772995: Implementing close() for closing windows with marionette; r=mdas
This commit is contained in:
Родитель
7761fe0d8e
Коммит
5e6f4b8272
|
@ -256,7 +256,7 @@ class Marionette(object):
|
||||||
response = self._send_message('getWindows', 'value')
|
response = self._send_message('getWindows', 'value')
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def close_window(self, window_id=None):
|
def close(self, window_id=None):
|
||||||
if not window_id:
|
if not window_id:
|
||||||
window_id = self.current_window_handle
|
window_id = self.current_window_handle
|
||||||
response = self._send_message('closeWindow', 'ok', value=window_id)
|
response = self._send_message('closeWindow', 'ok', value=window_id)
|
||||||
|
|
|
@ -55,6 +55,41 @@ class TestSwitchWindow(MarionetteTestCase):
|
||||||
self.assertEqual(self.marionette.current_window_handle, orig_win)
|
self.assertEqual(self.marionette.current_window_handle, orig_win)
|
||||||
self.assertEqual(len(self.marionette.window_handles), len(orig_available))
|
self.assertEqual(len(self.marionette.window_handles), len(orig_available))
|
||||||
|
|
||||||
|
def testShouldLoadAWindowAndThenCloseIt(self):
|
||||||
|
test_html = self.marionette.absolute_url("test_windows.html")
|
||||||
|
self.marionette.navigate(test_html)
|
||||||
|
current = self.marionette.current_window_handle
|
||||||
|
|
||||||
|
self.marionette.find_element('link text',"Open new window").click()
|
||||||
|
window_handles = self.marionette.window_handles
|
||||||
|
window_handles.remove(current)
|
||||||
|
|
||||||
|
self.marionette.switch_to_window(window_handles[0])
|
||||||
|
self.assertEqual(self.marionette.title, "We Arrive Here")
|
||||||
|
|
||||||
|
handle = self.marionette.current_window_handle
|
||||||
|
|
||||||
|
self.assertEqual(self.marionette.current_window_handle, handle)
|
||||||
|
self.assertEqual(2, len(self.marionette.window_handles))
|
||||||
|
|
||||||
|
# Let's close and check
|
||||||
|
self.marionette.close()
|
||||||
|
self.marionette.switch_to_window(current)
|
||||||
|
self.assertEqual(1, len(self.marionette.window_handles))
|
||||||
|
|
||||||
|
def testShouldCauseAWindowToLoadAndCheckItIsOpenThenCloseIt(self):
|
||||||
|
test_html = self.marionette.absolute_url("test_windows.html")
|
||||||
|
self.marionette.navigate(test_html)
|
||||||
|
current = self.marionette.current_window_handle
|
||||||
|
|
||||||
|
self.marionette.find_element('link text',"Open new window").click()
|
||||||
|
self.assertEqual(2, len(self.marionette.window_handles))
|
||||||
|
|
||||||
|
# Let's close and check
|
||||||
|
self.marionette.close()
|
||||||
|
self.marionette.switch_to_window(current)
|
||||||
|
self.assertEqual(1, len(self.marionette.window_handles))
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
#ensure that we close the window, regardless of pass/failure
|
#ensure that we close the window, regardless of pass/failure
|
||||||
self.close_new_window()
|
self.close_new_window()
|
||||||
|
|
|
@ -1192,6 +1192,45 @@ MarionetteDriverActor.prototype = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the Browser Window.
|
||||||
|
*
|
||||||
|
* If it is B2G it returns straight away and does not do anything
|
||||||
|
*
|
||||||
|
* If is desktop it calculates how many windows are open and if there is only
|
||||||
|
* 1 then it deletes the session otherwise it closes the window
|
||||||
|
*/
|
||||||
|
closeWindow: function MDA_closeWindow() {
|
||||||
|
if (appName == "B2G") {
|
||||||
|
// We can't close windows so just return
|
||||||
|
this.sendOk();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Get the total number of windows
|
||||||
|
let numOpenWindows = 0;
|
||||||
|
let winEnum = this.getWinEnumerator();
|
||||||
|
while (winEnum.hasMoreElements()) {
|
||||||
|
numOpenWindows += 1;
|
||||||
|
winEnum.getNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
// if there is only 1 window left, delete the session
|
||||||
|
if (numOpenWindows === 1){
|
||||||
|
this.deleteSession();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try{
|
||||||
|
this.messageManager.removeDelayedFrameScript("chrome://marionette/content/marionette-listener.js");
|
||||||
|
this.getCurrentWindow().close();
|
||||||
|
this.sendOk();
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
this.sendError("Could not close window: " + e.message, 13, e.stack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes the session.
|
* Deletes the session.
|
||||||
*
|
*
|
||||||
|
@ -1393,7 +1432,8 @@ MarionetteDriverActor.prototype.requestTypes = {
|
||||||
"switchToWindow": MarionetteDriverActor.prototype.switchToWindow,
|
"switchToWindow": MarionetteDriverActor.prototype.switchToWindow,
|
||||||
"deleteSession": MarionetteDriverActor.prototype.deleteSession,
|
"deleteSession": MarionetteDriverActor.prototype.deleteSession,
|
||||||
"emulatorCmdResult": MarionetteDriverActor.prototype.emulatorCmdResult,
|
"emulatorCmdResult": MarionetteDriverActor.prototype.emulatorCmdResult,
|
||||||
"importScript": MarionetteDriverActor.prototype.importScript
|
"importScript": MarionetteDriverActor.prototype.importScript,
|
||||||
|
"closeWindow": MarionetteDriverActor.prototype.closeWindow
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Загрузка…
Ссылка в новой задаче