1from .base import Browser, ExecutorBrowser, require_arg 2from .base import get_timeout_multiplier # noqa: F401 3from ..webdriver_server import InternetExplorerDriverServer 4from ..executors import executor_kwargs as base_executor_kwargs 5from ..executors.executorinternetexplorer import InternetExplorerDriverWdspecExecutor # noqa: F401 6 7__wptrunner__ = {"product": "ie", 8 "check_args": "check_args", 9 "browser": "InternetExplorerBrowser", 10 "executor": {"wdspec": "InternetExplorerDriverWdspecExecutor"}, 11 "browser_kwargs": "browser_kwargs", 12 "executor_kwargs": "executor_kwargs", 13 "env_extras": "env_extras", 14 "env_options": "env_options", 15 "timeout_multiplier": "get_timeout_multiplier"} 16 17 18def check_args(**kwargs): 19 require_arg(kwargs, "webdriver_binary") 20 21def browser_kwargs(test_type, run_info_data, config, **kwargs): 22 return {"webdriver_binary": kwargs["webdriver_binary"], 23 "webdriver_args": kwargs.get("webdriver_args")} 24 25def executor_kwargs(test_type, server_config, cache_manager, run_info_data, 26 **kwargs): 27 options = {} 28 options["requireWindowFocus"] = True 29 capabilities = {} 30 capabilities["se:ieOptions"] = options 31 executor_kwargs = base_executor_kwargs(test_type, server_config, 32 cache_manager, run_info_data, **kwargs) 33 executor_kwargs["close_after_done"] = True 34 executor_kwargs["capabilities"] = capabilities 35 return executor_kwargs 36 37def env_extras(**kwargs): 38 return [] 39 40def env_options(): 41 return {"supports_debugger": False} 42 43class InternetExplorerBrowser(Browser): 44 used_ports = set() 45 46 def __init__(self, logger, webdriver_binary, webdriver_args=None): 47 Browser.__init__(self, logger) 48 self.server = InternetExplorerDriverServer(self.logger, 49 binary=webdriver_binary, 50 args=webdriver_args) 51 self.webdriver_host = "localhost" 52 self.webdriver_port = self.server.port 53 54 def start(self, **kwargs): 55 self.server.start() 56 57 def stop(self, force=False): 58 self.server.stop(force=force) 59 60 def pid(self): 61 return self.server.pid 62 63 def is_alive(self): 64 # TODO(ato): This only indicates the server is alive, 65 # and doesn't say anything about whether a browser session 66 # is active. 67 return self.server.is_alive() 68 69 def cleanup(self): 70 self.stop() 71 72 def executor_browser(self): 73 return ExecutorBrowser, {"webdriver_url": self.server.url} 74