Function returns browser version for specified browser using executable path passed in arguments. :param browser_name: :param executable_path: e.g. /usr/bin/firefox :return: browser version
(browser_name, executable_path)
| 40 | |
| 41 | |
| 42 | def get_browser_version(browser_name, executable_path): |
| 43 | """ |
| 44 | Function returns browser version for specified browser using executable |
| 45 | path passed in arguments. |
| 46 | :param browser_name: |
| 47 | :param executable_path: e.g. /usr/bin/firefox |
| 48 | :return: browser version |
| 49 | """ |
| 50 | # On Linux/Mac we run the browser executable with the --version flag, |
| 51 | # then parse the output. |
| 52 | browser_version_val = None |
| 53 | try: |
| 54 | result = subprocess.Popen([executable_path, '--version'], |
| 55 | stdout=subprocess.PIPE) |
| 56 | except FileNotFoundError: |
| 57 | print('The specified browser executable could not be found.') |
| 58 | sys.exit(1) |
| 59 | |
| 60 | version_str = result.stdout.read().decode("utf-8") |
| 61 | |
| 62 | if browser_name.lower() == "chrome": |
| 63 | # Check for 'Chrom' not 'Chrome' in case the user is using Chromium. |
| 64 | if "Chrom" not in version_str: |
| 65 | print('The specified Chrome executable output an unexpected ' |
| 66 | 'version string: {}.'.format(version_str)) |
| 67 | sys.exit(1) |
| 68 | # On some linux distro `chrome--version` gives output like |
| 69 | # 'Google Chrome 80.0.3987.132 unknown\n' |
| 70 | # so we need to check and remove the unknown string from the version |
| 71 | if version_str.endswith("unknown\n"): |
| 72 | version_str = version_str.strip("unknown\n").strip() |
| 73 | |
| 74 | chrome_version = '.'.join(version_str.split()[-1].split('.')[:-2]) |
| 75 | |
| 76 | # Make sure browser version has only 1 decimal point |
| 77 | if chrome_version.count('.') != 1: |
| 78 | print('The specified Chrome executable output an unexpected ' |
| 79 | 'version string: {}.'.format(version_str)) |
| 80 | sys.exit(1) |
| 81 | browser_version_val = chrome_version |
| 82 | elif browser_name.lower() == "firefox": |
| 83 | if "Firefox" not in version_str: |
| 84 | print('The specified Firefox executable output an unexpected ' |
| 85 | 'version string: {}.'.format(version_str)) |
| 86 | sys.exit(1) |
| 87 | |
| 88 | # Some time firefox --version gives output like |
| 89 | # 'Running without a11y support! |
| 90 | # Mozilla Firefox 68.7.0esr' |
| 91 | # Other output - [root@localhost local]# /usr/bin/firefox --version |
| 92 | # Mozilla Firefox 75.0 |
| 93 | if 'esr' in version_str: |
| 94 | firefox_version = '.'.join( |
| 95 | version_str.split('esr')[0].split()[-1].split('.')[:-1]) |
| 96 | else: |
| 97 | firefox_version = '.'.join( |
| 98 | version_str.split()[-1].split('.')[:-1]) |
| 99 |
no test coverage detected