def FindBrowser(options): """Finds the best PossibleBrowser object to run given the provided BrowserOptions object. The returned possiblity object can then be used to connect to and control the located browser. A BrowserFinderException will be raised if the BrowserOptions argument is improperly set or if an error occurs when finding a browser. """ if options.browser_type == 'exact' and options.browser_executable == None: raise BrowserFinderException( '--browser=exact requires --browser-executable to be set.') if options.browser_type != 'exact' and options.browser_executable != None: raise BrowserFinderException( '--browser-executable requires --browser=exact.') if options.browser_type == 'cros-chrome' and options.cros_remote == None: raise BrowserFinderException( 'browser_type=cros-chrome requires cros_remote be set.') if (options.browser_type != 'cros-chrome' and options.browser_type != 'cros-chrome-guest' and options.cros_remote != None): raise BrowserFinderException( 'cros_remote requires browser_type=cros-chrome or cros-chrome-guest.' ) if options.browser_type == None: raise BrowserTypeRequiredException('browser_type must be specified') browsers = [] browsers.extend(desktop_browser_finder.FindAllAvailableBrowsers(options)) browsers.extend(android_browser_finder.FindAllAvailableBrowsers(options)) browsers.extend(cros_browser_finder.FindAllAvailableBrowsers(options)) if options.browser_type == 'any': types = ALL_BROWSER_TYPES.split(',') def compare_browsers_on_type_priority(x, y): x_idx = types.index(x.browser_type) y_idx = types.index(y.browser_type) return x_idx - y_idx browsers.sort(compare_browsers_on_type_priority) if len(browsers) >= 1: return browsers[0] else: return None matching_browsers = [ b for b in browsers if b.browser_type == options.browser_type and b.SupportsOptions(options) ] if len(matching_browsers) == 1: return matching_browsers[0] elif len(matching_browsers) > 1: logging.warning('Multiple browsers of the same type found: %s' % (repr(matching_browsers))) return matching_browsers[0] else: return None
def test_no_adb(self): options = browser_options.BrowserOptions() def NoAdb(*args, **kargs): # pylint: disable=W0613 raise OSError('not found') self._stubs.subprocess.Popen = NoAdb browsers = android_browser_finder.FindAllAvailableBrowsers(options) self.assertEquals(0, len(browsers))
def GetAllAvailableBrowserTypes(options): """Returns an array of browser types supported on this system.""" browsers = [] browsers.extend(desktop_browser_finder.FindAllAvailableBrowsers(options)) browsers.extend(android_browser_finder.FindAllAvailableBrowsers(options)) browsers.extend(cros_browser_finder.FindAllAvailableBrowsers(options)) type_list = set([browser.browser_type for browser in browsers]) type_list = list(type_list) type_list.sort() return type_list
def test_adb_two_devices(self): options = browser_options.BrowserOptions() self._stubs.adb_commands.attached_devices = [ '015d14fec128220c', '015d14fec128220d' ] log_stub = LoggingStub() browsers = android_browser_finder.FindAllAvailableBrowsers( options, log_stub) self.assertEquals(1, len(log_stub.warnings)) self.assertEquals(0, len(browsers))
def GetAllAvailableBrowserTypes(options): """Returns an array of browser types supported on this system. A BrowserFinderException will be raised if the BrowserOptions argument is improperly set or if an error occurs when finding a browser. """ browsers = [] browsers.extend(desktop_browser_finder.FindAllAvailableBrowsers(options)) browsers.extend(android_browser_finder.FindAllAvailableBrowsers(options)) browsers.extend(cros_browser_finder.FindAllAvailableBrowsers(options)) type_list = set([browser.browser_type for browser in browsers]) type_list = list(type_list) type_list.sort() return type_list
def test_adb_permissions_error(self): options = browser_options.BrowserOptions() self._stubs.subprocess.Popen.communicate_result = ( """List of devices attached ????????????\tno permissions""", """* daemon not running. starting it now on port 5037 * * daemon started successfully * """) log_stub = LoggingStub() browsers = android_browser_finder.FindAllAvailableBrowsers( options, log_stub) self.assertEquals(3, len(log_stub.warnings)) self.assertEquals(0, len(browsers))
def test_adb_one_device(self): options = browser_options.BrowserOptions() self._stubs.adb_commands.attached_devices = ['015d14fec128220c'] def OnPM(args): assert args[0] == 'pm' assert args[1] == 'list' assert args[2] == 'packages' return [ 'package:org.chromium.content_shell_apk', 'package.com.google.android.setupwizard' ] self._stubs.adb_commands.shell_command_handlers['pm'] = OnPM browsers = android_browser_finder.FindAllAvailableBrowsers(options) self.assertEquals(1, len(browsers))
def test_adb_no_devices(self): options = browser_options.BrowserOptions() browsers = android_browser_finder.FindAllAvailableBrowsers(options) self.assertEquals(0, len(browsers))