{"record":{"id":"a431c8b8d5a1f711","repo":"SeleniumHQ/selenium","slug":"only-children-of-cls-name-may-be-instantia","errorCode":null,"errorMessage":"Only children of '{cls.__name__}' may be instantiated","messagePattern":"Only children of '(.+?)' may be instantiated","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"py/selenium/webdriver/common/webdriver.py","lineNumber":30,"sourceCode":"# software distributed under the License is distributed on an\n# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n# KIND, either express or implied.  See the License for the\n# specific language governing permissions and limitations\n# under the License.\n\nfrom selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver\n\n\nclass LocalWebDriver(RemoteWebDriver):\n    \"\"\"Base class for local WebDrivers.\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self._is_remote = False\n\n    def __new__(cls, *args, **kwargs):\n        if cls is LocalWebDriver:\n            raise TypeError(f\"Only children of '{cls.__name__}' may be instantiated\")\n        return object.__new__(cls)\n\n    def quit(self) -> None:\n        \"\"\"Closes the browser and shuts down the driver executable.\"\"\"\n        try:\n            super().quit()\n        except Exception:\n            # We don't care about the message because something probably has gone wrong\n            pass\n        finally:\n            if hasattr(self, \"service\") and self.service is not None:\n                self.service.stop()\n\n    def download_file(self, *args, **kwargs):\n        \"\"\"Only implemented in RemoteWebDriver.\"\"\"\n        raise NotImplementedError\n\n    def get_downloadable_files(self, *args, **kwargs):","sourceCodeStart":12,"sourceCodeEnd":48,"githubUrl":"https://github.com/SeleniumHQ/selenium/blob/aa36b38e696a0909e973bdf5e2f9031ffe842c4b/py/selenium/webdriver/common/webdriver.py#L12-L48","documentation":"Raised by LocalWebDriver.__new__ when someone attempts to instantiate the LocalWebDriver base class directly (cls is LocalWebDriver). LocalWebDriver is an abstract base for local browser drivers (Chrome, Firefox, Edge, Safari) and enforces instantiation only of concrete subclasses via __new__ rather than ABCMeta.","triggerScenarios":"Writing `driver = LocalWebDriver()` directly, or dynamically constructing a class where the resolved class object is exactly LocalWebDriver rather than a subclass. This is a programmer error, not an environmental issue.","commonSituations":"Mistakenly importing LocalWebDriver instead of a concrete driver, building a generic driver factory that falls back to the base class, or misconfigured dynamic imports resolving to the base.","solutions":["Instantiate a concrete driver instead: webdriver.Chrome(), webdriver.Firefox(), webdriver.Edge(), or webdriver.Safari().","If building a factory, ensure the resolved class is never LocalWebDriver itself.","Import the concrete driver class, not selenium.webdriver.common.webdriver.LocalWebDriver."],"exampleFix":"# before\nfrom selenium.webdriver.common.webdriver import LocalWebDriver\ndriver = LocalWebDriver()  # -> TypeError\n\n# after\nfrom selenium import webdriver\ndriver = webdriver.Chrome()","handlingStrategy":"type-guard","validationCode":"from selenium.webdriver.common.webdriver import LocalWebDriver\nassert cls is not LocalWebDriver, 'Instantiate a concrete driver (Chrome/Firefox/Edge/Safari)'","typeGuard":"def is_concrete_local_driver(cls) -> bool:\n    from selenium.webdriver.common.webdriver import LocalWebDriver\n    return cls is not LocalWebDriver and issubclass(cls, LocalWebDriver)","tryCatchPattern":"null","preventionTips":["Never import or instantiate LocalWebDriver directly.","Use selenium.webdriver.Chrome / Firefox / Edge / Safari.","In factories, validate the resolved class is a concrete subclass."],"tags":["webdriver","abstract-instantiation","api-usage","typeerror"],"backgroundTag":null,"analyzedSha":"aa36b38e696a0909e973bdf5e2f9031ffe842c4b","analyzedAt":"2026-08-14T02:32:32.244Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}