I'm in the process of updating Selenium and chromedriver for automated testing purposes. I updated chromedriver and Chrome to version 98, and I went from Selenium v.3.3.3 to 4.1.0.
But I'm getting an unknown error whenever I try and run my test scripts now. The entire traceback is below:
C:\sw\src\Presentation\client\TestAutomationScripts\TestAutomationScripts\TestPlans>python TestPlan_ATO.py Traceback (most recent call last): File "TestPlan_ATO.py", line 9, in <module> class TestPlan_ATO(): File "TestPlan_ATO.py", line 11, in TestPlan_ATO testPlan = Test(name="TestPlan_ATO") File "C:\sw\src\Presentation\client\TestAutomationScripts\TestAutomationScripts\TestPlans\TestCases\Test.py", line 113, in __init__ self.driver = WebDriverInstance().driver File "..\Util\WebDriverInstance.py", line 43, in __call__ cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs) File "..\Util\WebDriverInstance.py", line 97, in __init__ driver = driverModule(executable_path=driverPath) File "..\Util\WebDriverInstance.py", line 73, in createChromeDriver driver = webdriver.Chrome(desired_capabilities=capabilities) File "C:\Anaconda\lib\selenium\webdriver\chrome\webdriver.py", line 73, in __init__ service_log_path, service, keep_alive) File "C:\Anaconda\lib\selenium\webdriver\chromium\webdriver.py", line 99, in __init__ options=options) File "C:\Anaconda\lib\selenium\webdriver\remote\webdriver.py", line 269, in __init__ self.start_session(capabilities, browser_profile) File "C:\Anaconda\lib\selenium\webdriver\remote\webdriver.py", line 360, in start_session response = self.execute(Command.NEW_SESSION, parameters) File "C:\Anaconda\lib\selenium\webdriver\remote\webdriver.py", line 425, in execute self.error_handler.check_response(response) File "C:\Anaconda\lib\selenium\webdriver\remote\errorhandler.py", line 247, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: Failed to create Chrome process. Stacktrace: Backtrace: Ordinal0 [0x00317AC3+2587331] Ordinal0 [0x002AADD1+2141649] Ordinal0 [0x001A3BB8+1063864] Ordinal0 [0x001BF684+1177220] Ordinal0 [0x001BCC51+1166417] Ordinal0 [0x001ED12F+1364271] Ordinal0 [0x001ECD5A+1363290] Ordinal0 [0x001E84A6+1344678] Ordinal0 [0x001C53F6+1201142] Ordinal0 [0x001C62E6+1204966] GetHandleVerifier [0x004BDF22+1680738] GetHandleVerifier [0x00570DBC+2413564] GetHandleVerifier [0x003AD151+563089] GetHandleVerifier [0x003ABF13+558419] Ordinal0 [0x002B081E+2164766] Ordinal0 [0x002B5508+2184456] Ordinal0 [0x002B5650+2184784] Ordinal0 [0x002BF5BC+2225596] BaseThreadInitThunk [0x75A4FA29+25] RtlGetAppContainerNamedObjectPath [0x77107A9E+286] RtlGetAppContainerNamedObjectPath [0x77107A6E+238] (No symbol) [0x00000000] I have Chrome on my PATH, but that doesn't seem to make a difference. Under the 'Compatibility' tab in Chrome properties, I've checked 'Run this program as administrator' but, again, that didn't work. I'm not sure what else to do.
Edit 1:
The Anaconda distribution sits on my C drive. The selenium directory is inside the Anaconda directory. When I updated selenium, I got ModuleNotFoundError: 'certifi' in the traceback:
Traceback (most recent call last): File "TestPlan_ATO.py", line 2, in <module> from TestCases.Test import Test File "C:\sw\src\Presentation\client\TestAutomationScripts\TestAutomationScripts\TestPlans\TestCases\Test.py", line 72, in <module> from Util.WebDriverEventListener import WebDriverEventListener as Listener File "..\Util\WebDriverEventListener.py", line 25, in <module> from selenium.webdriver.support.events import AbstractEventListener File "C:\Anaconda\lib\selenium\webdriver\__init__.py", line 18, in <module> from .firefox.webdriver import WebDriver as Firefox # noqa File "C:\Anaconda\lib\selenium\webdriver\firefox\webdriver.py", line 24, in <module> from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver File "C:\Anaconda\lib\selenium\webdriver\remote\webdriver.py", line 39, in <module> from .remote_connection import RemoteConnection File "C:\Anaconda\lib\selenium\webdriver\remote\remote_connection.py", line 26, in <module> import certifi ModuleNotFoundError: No module named 'certifi' So to fix this error, I went into remote_connection.py and added the first two lines below to the file.
import sys sys.path.append('/Anaconda/Lib/site-packages/pip/_vendor') import logging import socket import string import os import certifi import urllib3 import platform I then got another error complaining about testcase.ini, which is the config file that contains the IPs of the systems under test, the login information for the app, etc.
Cannot load C:\Anaconda\Lib\site-packages\pip\_vendor\TestPlans\TestCases\testcase.ini Traceback (most recent call last): File "TestPlan_ATO.py", line 5, in <module> from TestCases.ATO.TestCase_ATO import TestCase_ATO File "C:\sw\src\Presentation\client\TestAutomationScripts\TestAutomationScripts\TestPlans\TestCases\ATO\TestCase_ATO.py", line 22, in <module> from Util.UiOps import UiOps as ops File "..\Util\UiOps.py", line 37, in <module> class UiOps: File "..\Util\UiOps.py", line 40, in UiOps config.load('','testcase.ini') File "..\Util\ConfigManager.py", line 114, in load new_dict: dict = self.loader.loadFile(package=package, module=module, filename=filename) File "..\Util\ConfigLoader.py", line 96, in loadFile raise IOError('Cannot load ' + config_file) OSError: Cannot load C:\Anaconda\Lib\site-packages\pip\_vendor\TestPlans\TestCases\testcase.ini testcase.ini is read every time an automated test is run. The ConfigLoader class returns a config object given a module name and file path relative to ConfigLoader. So I go into ConfigLoader.py and I change the -1s in the try/except block below to -2s:
try: if self.package: #If a package is given, use the last entry in sys.path which goes up a directory, and drill down into the package path = sys.path[-2] + "//" + self.package else: #If not, use the information stored in sys.path, and assume we want to look in TestPlans/TestCases path = sys.path[-2] + "//TestPlans//TestCases" And that is how I arrived at the Unknown Error which I first posted about.
testcase.ini is also where the browser is selected and the driver path is stored. It looks like this:
; parameters for test framework [TEST] DRIVER_PATH = C:\Anaconda\ BROWSER = CHROME ; BROWSER = EDGE ; BROWSER = FIREFOX CHROME_PATH = C:\Program Files\Google\Chrome\Application\chrome.exe ; EDGE_PATH = C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe ; FIREFOX_PATH = C:\Program Files\Mozilla Firefox\firefox.exe