本文整理汇总了Python中marionette.Marionette.execute_async_script方法的典型用法代码示例。如果您正苦于以下问题:Python Marionette.execute_async_script方法的具体用法?Python Marionette.execute_async_script怎么用?Python Marionette.execute_async_script使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类marionette.Marionette
的用法示例。
在下文中一共展示了Marionette.execute_async_script方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: main
# 需要导入模块: from marionette import Marionette [as 别名]
# 或者: from marionette.Marionette import execute_async_script [as 别名]
def main(options):
print "Setting up CertTest app to device"
dm = None
if options.adb_path:
dm = mozdevice.DeviceManagerADB(adbPath=options.adb_path)
else:
dm = mozdevice.DeviceManagerADB()
if dm.dirExists("/data/local/webapps/certtest-app"):
print "CertTest app is already installed"
return
dm.pushFile("certtest_app.zip", "/data/local/certtest_app.zip")
# forward the marionette port
print "Forwarding marionette port"
ret = dm.forward("tcp:2828", "tcp:2828")
if ret != 0:
#TODO: right thing here is to keep trying local ports and pass that value in our config
raise Exception("Can't use localhost:2828 for port forwarding. Is something else using port 2828?")
# install the app
print "installing the app"
f = open("app_install.js", "r")
script = f.read()
f.close()
m = Marionette()
m.start_session()
m.set_context("chrome")
m.set_script_timeout(5000)
m.execute_async_script(script)
m.delete_session()
示例2: install_app
# 需要导入模块: from marionette import Marionette [as 别名]
# 或者: from marionette.Marionette import execute_async_script [as 别名]
def install_app(app_name, app_path, adb_path="adb", script_timeout=5000, marionette=None):
"""
This installs the given application.
NOTE: if a marionette session is passed, this function switches to
'content' context and will be at the top-most frame.
"""
if is_installed(app_name, adb_path=adb_path):
raise Exception("%s is already installed" % app_name)
sys.exit(1)
app_zip = os.path.basename(app_path)
dm = mozdevice.DeviceManagerADB(adbPath=adb_path)
dm.pushFile("%s" % app_path, "/data/local/%s" % app_zip)
# forward the marionette port
if dm.forward("tcp:2828", "tcp:2828") != 0:
raise Exception("Can't use localhost:2828 for port forwarding." \
"Is something else using port 2828?")
# install the app
install_js = pkg_resources.resource_filename(__name__,
os.path.sep.join([
'app_install.js']))
with open(install_js, "r") as f:
script = f.read()
installed_app_name = app_name.lower().replace(" ", "-")
script = script.replace("YOURAPPID", installed_app_name)
script = script.replace("YOURAPPZIP", app_zip)
if not marionette:
m = Marionette()
m.start_session()
else:
m = marionette
m.switch_to_frame()
m.set_context("chrome")
m.set_script_timeout(script_timeout)
m.execute_async_script(script)
if not marionette:
m.delete_session()
else:
m.set_context("content")
示例3: install_app
# 需要导入模块: from marionette import Marionette [as 别名]
# 或者: from marionette.Marionette import execute_async_script [as 别名]
def install_app(app_name, app_path, adb_path=None):
dm = None
if adb_path:
dm = mozdevice.DeviceManagerADB(adbPath=adb_path)
else:
dm = mozdevice.DeviceManagerADB()
#TODO: replace with app name
installed_app_name = app_name.lower()
installed_app_name = installed_app_name.replace(" ", "-")
if dm.dirExists("/data/local/webapps/%s" % installed_app_name):
raise Exception("%s is already installed" % app_name)
sys.exit(1)
app_zip = os.path.basename(app_path)
dm.pushFile("%s" % app_path, "/data/local/%s" % app_zip)
# forward the marionette port
ret = dm.forward("tcp:2828", "tcp:2828")
if ret != 0:
raise Exception("Can't use localhost:2828 for port forwarding." \
"Is something else using port 2828?")
# install the app
install_js = pkg_resources.resource_filename(__name__,
os.path.sep.join([
'app_install.js']))
f = open(install_js, "r")
script = f.read()
f.close()
script = script.replace("YOURAPPID", installed_app_name)
script = script.replace("YOURAPPZIP", app_zip)
m = Marionette()
m.start_session()
m.set_context("chrome")
m.set_script_timeout(5000)
m.execute_async_script(script)
m.delete_session()
示例4: getTextContentViaMarionette
# 需要导入模块: from marionette import Marionette [as 别名]
# 或者: from marionette.Marionette import execute_async_script [as 别名]
def getTextContentViaMarionette(url):
if Marionette is None:
raise Exception("sorry this method is not supported because marionette driver couldn't be installed")
client = Marionette("localhost", port=2828)
print("client:", client)
client.start_session()
print("started session")
client.set_script_timeout(30000)
# not sure if one script ran after another
return client.execute_async_script("""
var win = window.open('""" + url + """');
setTimeout(function(){
textContent = win.document.body.textContent;
win.close();
marionetteScriptFinished(textContent);
}, 15000);
""")
示例5: listapps
# 需要导入模块: from marionette import Marionette [as 别名]
# 或者: from marionette.Marionette import execute_async_script [as 别名]
def listapps():
marionette = Marionette(host='localhost', port=2828)
marionette.start_session()
marionette.set_context(marionette.CONTEXT_CONTENT)
marionette.set_script_timeout(1000)
apps = marionette.execute_async_script("""
let req = navigator.mozApps.mgmt.getAll();
req.onsuccess = function() {
let apps = req.result;
let l = []
for (let a of apps) {
let data = {origin: a.origin, name: a.manifest.name};
if (a.manifest.entry_points)
data.entry_points = a.manifest.entry_points;
l.push(data);
}
marionetteScriptFinished(l);
};
""")
for a in apps:
print a["name"]
示例6: waitFor
# 需要导入模块: from marionette import Marionette [as 别名]
# 或者: from marionette.Marionette import execute_async_script [as 别名]
waitFor(
function() {
window.wrappedJSObject.LockScreen.unlock();
waitFor(
function() {
finish(window.wrappedJSObject.LockScreen.locked);
},
function() {
return !window.wrappedJSObject.LockScreen.locked;
}
);
},
function() {
return !!window.wrappedJSObject.LockScreen;
}
);
"""
from marionette import Marionette
marionette = Marionette('localhost', 2828)
marionette.start_session()
marionette.import_script('gaia_apps.js')
marionette.set_script_timeout(60000)
marionette.execute_script(unlock)
result = marionette.execute_async_script("GaiaApps.launchWithName('%s')" % "MozCampAsia-QualityApps")
marionette.switch_to_frame(result.get("frame"))
pdb.set_trace()
示例7: B2gExecutor
# 需要导入模块: from marionette import Marionette [as 别名]
# 或者: from marionette.Marionette import execute_async_script [as 别名]
#.........这里部分代码省略.........
:param by: options: "id", "xpath", "link text", "partial link text", "name",
"tag name", "class name", "css selector", "anon attribute"
"""
# self.switch_to_top_frame()
frame = self._marionette.find_element(by, frame_str)
self._marionette.switch_to_frame(frame)
def switch_to_top_frame(self):
self._marionette.switch_to_frame() # switch to the top-level frame
def restart_app(self):
# remember to disable screen timeout and screen lock before testing
# todo: open b2g simulator, install app,
# unlock_screen
# self._marionette.execute_script('window.wrappedJSObject.lockScreen.unlock();')
self.kill_all_apps()
# kill_all_apps() will also kill the 'homescreen app' on real device
# so trigger a home event to restore homescreen
if self.device:
self._dispatch_home_button_event()
self.clear_data()
self.touch_home_button()
# launch the app
self._gaia_apps.launch(self._app_name)
''' Deprecated
if self.device:
icon = self._marionette.find_element('xpath', "//li[contains(@aria-label, '" + self._app_name + "')]")
else:
icon = self._marionette.find_element('xpath', "//div[contains(@class, 'icon')]//span[contains(text(),'" + self._app_name + "')]")
icon.tap()
'''
time.sleep(5) # wait for app screen
self._marionette.switch_to_frame()
# this wait seems not working, need to find another useful one
Wait(self._marionette).until(lambda m: m.find_element('css selector', "iframe[data-url*='" + self._app_id + "']").is_displayed())
app_frame = self._marionette.find_element('css selector', "iframe[data-url*='" + self._app_id + "']")
self._marionette.switch_to_frame(app_frame)
def touch_home_button(self):
# ref: https://github.com/mozilla-b2g/gaia/blob/master/tests/python/gaia-ui-tests/gaiatest/gaia_test.py#L751
apps = self._gaia_apps
if apps.displayed_app.name.lower() != 'homescreen':
# touching home button will return to homescreen
self._dispatch_home_button_event()
Wait(self._marionette).until(
lambda m: apps.displayed_app.name.lower() == 'homescreen')
apps.switch_to_displayed_app()
else:
apps.switch_to_displayed_app()
mode = self._marionette.find_element(By.TAG_NAME, 'body').get_attribute('class')
self._dispatch_home_button_event()
apps.switch_to_displayed_app()
if 'edit-mode' in mode:
# touching home button will exit edit mode
Wait(self._marionette).until(lambda m: m.find_element(
By.TAG_NAME, 'body').get_attribute('class') != mode)
else:
# touching home button inside homescreen will scroll it to the top
Wait(self._marionette).until(lambda m: m.execute_script(
"return window.wrappedJSObject.scrollY") == 0)
def _dispatch_home_button_event(self):
self._gaia_device._dispatch_home_button_event()
''' Deprecated
self._marionette.switch_to_frame()
self._marionette.execute_script("window.wrappedJSObject.dispatchEvent(new Event('home'));")
'''
time.sleep(0.5)
def clear_data(self):
# for now, clear contact data
# https://github.com/mozilla-b2g/gaia/blob/v2.2/tests/python/gaia-ui-tests/gaiatest/gaia_test.py#L208
self._marionette.set_context(self._marionette.CONTEXT_CHROME)
result = self._marionette.execute_async_script('return GaiaDataLayer.removeAllContacts();')
assert result, 'Unable to remove all contacts'
self._marionette.set_context(self._marionette.CONTEXT_CONTENT)
time.sleep(0.5)
def kill_all_apps(self):
self._marionette.switch_to_frame()
self._marionette.execute_async_script("""
// Kills all running apps, except the homescreen.
function killAll() {
let manager = window.wrappedJSObject.appWindowManager;
let apps = manager.getApps();
for (let id in apps) {
let origin = apps[id].origin;
if (origin.indexOf('verticalhome') == -1) {
manager.kill(origin);
}
}
};
killAll();
// return true so execute_async_script knows the script is complete
marionetteScriptFinished(true);
""")
time.sleep(0.5)
示例8: Runner
# 需要导入模块: from marionette import Marionette [as 别名]
# 或者: from marionette.Marionette import execute_async_script [as 别名]
#.........这里部分代码省略.........
elif input.startswith(self._INPUT_COMMAND_PREFIX):
CmdDispatcher(self, input)
# if the postfix of input is MULTIPLE_LINE, then record this line and wait the next line until no input with MULTIPLE_LINE.
elif input.endswith(self._INPUT_MULTIPLE_LINE):
input_multiple = input[:len(input) - 1] + '; '
while True:
next_input = raw_input('... ')
if next_input.endswith(self._INPUT_MULTIPLE_LINE):
input_multiple = input_multiple + next_input[:len(next_input) - 1] + '; '
pass
else:
input_multiple = input_multiple + next_input + '; '
print self.execute_script(input_multiple)
break
# if input is NOT above inputs, then run marionette.execute_script(INPUT)/marionette.execute_async_script(INPUT)
# and print return value.
else:
print self.execute_script(input)
except EOFError:
self.goodbye()
exit()
except Exception as e:
print e
if self.open_app(-1):
self.start_js()
exit()
def execute_script(self, script):
try:
if self._is_async:
return self.m.execute_async_script(script)
else:
return self.m.execute_script(script)
except Exception as ex:
print str(ex.message)
def goodbye(self):
print 'End. Bye!!'
def open_app(self, input):
try:
# connect App by ID
app_id = int(input)
if app_id < 0:
print 'Connect to', self._get_system_URL()
self.set_current_frame(self._get_system_URL())
self.m.switch_to_frame()
else:
iframes = self.get_all_iframes_id_name_pair()
print 'Connect to', iframes[str(app_id)]
self.set_current_frame(iframes[str(app_id)])
self.m.switch_to_frame(app_id)
return True
except(ValueError):
# connect to System app
if (input.lower() == self._INPUT_SYSTEM_APP_KEYWORD) or (input.lower() in self._get_system_URL()):
print 'Connect to', self._get_system_URL()
self.set_current_frame(self._get_system_URL())
self.m.switch_to_frame()
return True
# connect App by substring
示例9: assert
# 需要导入模块: from marionette import Marionette [as 别名]
# 或者: from marionette.Marionette import execute_async_script [as 别名]
assert(m.get_windows() == server.TEST_WINDOW_LIST)
assert(m.switch_to_window('window2'))
assert(m.window == 'window2')
assert(m.close_window('window2'))
assert(m.set_script_timeout(1000))
assert(m.set_search_timeout(500))
assert(m.get_url() == server.TEST_URL)
assert(m.navigate(server.TEST_URL))
assert(m.go_back())
assert(m.go_forward())
assert(m.refresh())
assert(m.execute_script(server.TEST_EXECUTE_SCRIPT))
assert(m.execute_js_script(server.TEST_EXECUTE_SCRIPT))
assert(m.execute_js_script(server.TEST_EXECUTE_SCRIPT, server.TEST_EXECUTE_SCRIPT_ARGS))
assert(m.execute_script(server.TEST_EXECUTE_SCRIPT, server.TEST_EXECUTE_SCRIPT_ARGS))
assert(m.execute_async_script(server.TEST_EXECUTE_SCRIPT))
assert(m.execute_async_script(server.TEST_EXECUTE_SCRIPT, server.TEST_EXECUTE_SCRIPT_ARGS))
assert(str(m.find_element(HTMLElement.CLASS, 'heading')) == server.TEST_FIND_ELEMENT)
assert([str(x) for x in m.find_elements(HTMLElement.TAG, 'p')] == server.TEST_FIND_ELEMENTS)
assert(str(m.find_element(HTMLElement.CLASS, 'heading').find_element(HTMLElement.TAG, 'h1')) == server.TEST_FIND_ELEMENT)
assert([str(x) for x in m.find_element(HTMLElement.ID, 'div1').find_elements(HTMLElement.SELECTOR, '.main')] == \
server.TEST_FIND_ELEMENTS)
assert(m.find_element(HTMLElement.ID, 'id1').click())
assert(m.find_element(HTMLElement.ID, 'id2').text() == server.TEST_GET_TEXT)
assert(m.find_element(HTMLElement.ID, 'id3').send_keys('Mozilla Firefox'))
assert(m.find_element(HTMLElement.ID, 'id3').value() == server.TEST_GET_VALUE)
assert(m.find_element(HTMLElement.ID, 'id3').clear())
assert(m.find_element(HTMLElement.ID, 'id3').selected())
assert(m.find_element(HTMLElement.ID, 'id1').equals(m.find_element(HTMLElement.TAG, 'p')))
assert(m.find_element(HTMLElement.ID, 'id3').enabled())
assert(m.find_element(HTMLElement.ID, 'id3').displayed())
示例10: B2GMixin
# 需要导入模块: from marionette import Marionette [as 别名]
# 或者: from marionette.Marionette import execute_async_script [as 别名]
#.........这里部分代码省略.........
try:
self.getFile(self.userJS, our_userJS)
except subprocess.CalledProcessError:
pass
#if we successfully copied the profile, make a backup of the file
if os.path.exists(our_userJS):
self.shellCheckOutput(['dd', 'if=%s' % self.userJS, 'of=%s.orig' % self.userJS])
with open(our_userJS, 'a') as user_file:
user_file.write("%s" % prefs)
self.pushFile(our_userJS, self.userJS)
self.restartB2G()
self.setupMarionette()
def setupDHCP(self, interfaces=['eth0', 'wlan0']):
"""Sets up networking.
:param interfaces: Network connection types to try. Defaults to eth0 and wlan0.
"""
all_interfaces = [line.split()[0] for line in \
self.shellCheckOutput(['netcfg']).splitlines()[1:]]
interfaces_to_try = filter(lambda i: i in interfaces, all_interfaces)
tries = 5
print "Setting up DHCP..."
while tries > 0:
print "attempts left: %d" % tries
try:
for interface in interfaces_to_try:
self.shellCheckOutput(['netcfg', interface, 'dhcp'],
timeout=10)
if self.getIP(interfaces=[interface]):
return
except DMError:
pass
time.sleep(1)
tries -= 1
raise DMError("Could not set up network connection")
def restoreProfile(self):
"""
Restores the original user profile on the device.
"""
if not self.profileDir:
raise DMError("There is no profile to restore")
#if we successfully copied the profile, make a backup of the file
our_userJS = os.path.join(self.profileDir, "user.js")
if os.path.exists(our_userJS):
self.shellCheckOutput(['dd', 'if=%s.orig' % self.userJS, 'of=%s' % self.userJS])
shutil.rmtree(self.profileDir)
self.profileDir = None
def unlock(self):
"""
Unlocks the device, ensuring it will never go back to the lockscreen
"""
if not self.marionette or not self.marionette.session:
self.setupMarionette()
success = self.marionette.execute_async_script("""
let setlock = window.wrappedJSObject.SettingsListener.getSettingsLock();
let obj = {'screen.timeout': 0};
setlock.set(obj);
waitFor(
function() {
window.wrappedJSObject.LockScreen.unlock();
waitFor(
function() {
finish(window.wrappedJSObject.LockScreen.locked);
},
function() {
return !window.wrappedJSObject.LockScreen.locked;
}
);
},
function() {
return !!window.wrappedJSObject.LockScreen;
}
);
""")
if not success:
raise DMError("Unable to unlock device")
def getAppInfo(self):
"""
Returns the appinfo, with an additional "date" key.
:rtype: dictionary
"""
if not self.marionette or not self.marionette.session:
self.setupMarionette()
self.marionette.set_context("chrome")
appinfo = self.marionette.execute_script("""
var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
.getService(Components.interfaces.nsIXULAppInfo);
return appInfo;
""")
(year, month, day) = (appinfo["appBuildID"][0:4], appinfo["appBuildID"][4:6], appinfo["appBuildID"][6:8])
appinfo['date'] = "%s-%s-%s" % (year, month, day)
return appinfo
示例11: waitFor
# 需要导入模块: from marionette import Marionette [as 别名]
# 或者: from marionette.Marionette import execute_async_script [as 别名]
waitFor(
function() {
window.wrappedJSObject.LockScreen.unlock();
waitFor(
function() {
finish(window.wrappedJSObject.LockScreen.locked);
},
function() {
return !window.wrappedJSObject.LockScreen.locked;
}
);
},
function() {
return !!window.wrappedJSObject.LockScreen;
}
);
"""
from marionette import Marionette
marionette = Marionette('localhost', 2828)
marionette.start_session()
marionette.import_script('gaia_apps.js')
marionette.set_script_timeout(60000)
marionette.execute_script(unlock)
result = marionette.execute_async_script("GaiaApps.launchWithName('%s')" % "NxtGenUG-QualityApps")
marionette.switch_to_frame(result.get("frame"))
pdb.set_trace()
示例12: Marionette
# 需要导入模块: from marionette import Marionette [as 别名]
# 或者: from marionette.Marionette import execute_async_script [as 别名]
import SimpleHTTPServer
import SocketServer
from marionette import Marionette
m = Marionette('localhost', 2828)
m.start_session()
script = """
var request = navigator.mozApps.install('http://localhost:3000/package.manifest');
request.onsuccess = function () {
marionetteScriptFinished('YAY');
};
request.onerror = function(e) {
marionetteScriptFinished('Boooo :( ' + this.error.name);
};"""
print m.execute_async_script(script)
# Out[69]: u'Boooo :( INVALID_MANIFEST'
示例13: TestRun
# 需要导入模块: from marionette import Marionette [as 别名]
# 或者: from marionette.Marionette import execute_async_script [as 别名]
class TestRun(object):
def __init__(self, adb="adb", serial=None):
self.test_results = {}
self.test_results_file = None
self.m = None
self.gaia_apps = None
self.screenshot_path = None
self.logcat_path = None
self.app_name = None
self.attempt = None
self.num_apps = None
self.device = None
self.serial = serial
self.port = None
self.run_log = logging.getLogger('marketplace-test')
if self.serial:
self.dm = DeviceManagerADB(adbPath=adb, deviceSerial=serial)
else:
self.dm = DeviceManagerADB(adbPath=adb)
def reset_marionette(self):
try:
self.m.delete_session()
except Exception:
pass
self.m = None
self.get_marionette()
def get_marionette(self):
if not self.m:
self.m = Marionette(port=self.port)
self.m.start_session()
self.device = GaiaDevice(self.m)
self.device.add_device_manager(self.dm)
self.gaia_apps = GaiaApps(self.m)
else:
tries = 5
while tries > 0:
try:
self.m.get_url()
break
except MarionetteException as e:
if "Please start a session" in str(e):
time.sleep(5)
self.m = Marionette(port=self.port)
self.m.start_session()
self.device = GaiaDevice(self.m)
self.device.add_device_manager(self.dm)
self.gaia_apps = GaiaApps(self.m)
tries -= 1
else:
raise e
else:
self.run_log.error("Can't connect to marionette, rebooting")
self.restart_device()
return self.m
def write_to_file(self, data):
with open("%s.tmp" % self.test_results_file, "w") as f:
f.write(data)
shutil.copyfile("%s.tmp" % self.test_results_file, self.test_results_file)
def add_values(self, key, value):
if self.serial:
self.test_results["%s_%s" % (key, self.serial)] = value
else:
self.test_results["%s" % key] = value
def add_result(self, passed=False, status=None, uninstalled_failure=False):
values = {}
if status:
if not passed:
values["status"] = "FAILED: %s" % status
else:
values["status"] = "PASS"
if self.screenshot_path:
values["screenshot"] = self.screenshot_path
if self.logcat_path:
values["logcat"] = self.logcat_path
if uninstalled_failure:
values["uninstalled_failure"] = uninstalled_failure
entry = "%s_%s" % (self.app_name, self.attempt)
self.test_results[entry] = values
def launch_with_manifest(self, manifest):
self.m.switch_to_frame()
result = self.m.execute_async_script("GaiaApps.launchWithManifestURL('%s')" % manifest, script_timeout=30000)
if result == False:
raise Exception("launch timed out")
app = GaiaApp(frame=result.get('frame'),
src=result.get('src'),
name=result.get('name'),
origin=result.get('origin'))
if app.frame_id is None:
raise Exception("failed to launch; there is no app frame")
self.m.switch_to_frame(app.frame_id)
return app
def uninstall_with_manifest(self, manifest):
#.........这里部分代码省略.........
示例14: TestCase
# 需要导入模块: from marionette import Marionette [as 别名]
# 或者: from marionette.Marionette import execute_async_script [as 别名]
class TestCase(tornado.testing.AsyncTestCase):
def __init__(self, *args, **kwargs):
#self.config = kwargs.pop("config")
self.handler = kwargs.pop('handler')
self.io_loop = kwargs.pop('io_loop')
self.cert_test_app = None
super(TestCase, self).__init__(*args, **kwargs)
def setUp(self):
super(TestCase, self).setUp()
# import environment
# from environment import InProcessTestEnvironment
# self.environment = environment.get(InProcessTestEnvironment)
# self.server = self.environment.server
self.marionette = None
self.create_marionette()
self.io_loop.run_sync(self.use_cert_app)
def tearDown(self):
super(TestCase, self).tearDown()
self.io_loop.run_sync(self.close_cert_app)
def create_marionette(self):
if not self.marionette or not self.marionette.session:
self.marionette = Marionette()
self.marionette.start_session()
@tornado.gen.coroutine
def use_cert_app(self):
# app management is done in the system app
self.marionette.switch_to_frame()
self.marionette.import_script("tests/app_management.js")
script = "GaiaApps.launchWithName('CertTest App');"
try:
self.cert_test_app = self.marionette.execute_async_script(script, script_timeout=5000)
self.marionette.switch_to_frame(self.cert_test_app["frame"])
self.assertTrue('certtest' in self.marionette.get_url())
except MarionetteException as e:
ok = yield self.instruct("Could not launch CertTest app automatically." \
"Please launch by hand then hit OK to continue.")
self.assertTrue(ok, "Could not launch CertTest app")
except Exception as e:
message = "Unexpected exception: %s" % e
yield self.instruct(message)
self.fail(message)
@tornado.gen.coroutine
def close_cert_app(self):
self.marionette.import_script("tests/app_management.js")
# app management is done in the system app
self.marionette.switch_to_frame()
script = "GaiaApps.kill('%s');" % self.cert_test_app["origin"]
try:
self.marionette.execute_async_script(script, script_timeout=5000)
self.assertTrue('certtest' not in self.marionette.get_url())
except MarionetteException as e:
ok = yield self.instruct("Could not close CertTest app automatically." \
"Please close by hand then hit OK to continue.")
self.assertTrue(ok, "Could not close CertTest app")
except Exception as e:
message = "Unexpected exception: %s" % e
yield self.instruct(message)
self.fail(message)
def get_new_ioloop(self):
return self.io_loop
def prompt(self, message):
"""Prompt the user for a reply. Returns a future which must be
yielded.
This will trigger an overlay in the host browser window
which can be used to tell the user to perform an action or to
input some manual data for us to work on.
Sample usage::
answer = yield prompt("What's the meaning of life?")
assert answer == 42
This function is a simple wrapper for ``tornado.gen.Task``,
and is equivalent to the usage of that.
:param message: The question to ask or message to give the
user.
:returns: A generator which must be yielded. Once yielded,
the return value will be the value of the prompt,
or False if the user hit 'Cancel'
"""
return tornado.gen.Task(self.handler.get_user_input, message)
def instruct(self, message):
"""Presents the user with an instruction. Returns a future which
must be yielded.
This will trigger an overlay in the host browser window
#.........这里部分代码省略.........