Python 3从兄弟目录导入模块报错:ModuleNotFoundError: No module named 'Pages'
解决ModuleNotFoundError: No module named 'Pages'问题
项目目录结构
. ├── Pages │ ├── __init__.py │ ├── homepage.py │ └── locators.py └── TestCases ├── __init__.py └── sign_in.py
相关代码
sign_in.py
import time from selenium import webdriver from Pages.homepage import Homepage # Test Sign In class sign_in(): def setup(self): self.driver = webdriver.Chrome() def test_sign_in(self): driver = self.driver driver.get('https://google.com') driver.set_page_load_timeout(20) h = Homepage(driver) h.signin().click() time.sleep(50)
homepage.py
from locators import Locator from selenium.webdriver.common.by import By class Homepage(object): def __init__(self,driver): self.driver = driver self.signin = driver.find.element(By.XPATH, Locator.sign_in)
运行错误
ModuleNotFoundError: No module named 'Pages'
已尝试在sign_in.py中添加sys.path.append("..")但无效,希望通过重构目录而非临时办法解决问题。
解决方案
方案1:将根目录设为Python包
- 在包含Pages和TestCases的项目根目录下创建空的
__init__.py文件,标记该目录为Python可导入包。 - 修改导入语句:
sign_in.py中改为相对导入:from ..Pages.homepage import Homepagehomepage.py中改为相对导入:from .locators import Locator
- 从根目录的上级目录执行测试命令:
python -m <根目录名称>.TestCases.sign_in,例如根目录名为selenium_test,则运行python -m selenium_test.TestCases.sign_in
方案2:重构为标准测试项目结构
调整为更规范的布局,彻底解决导入问题:
test_project/ ├── src/ │ ├── __init__.py │ └── Pages/ │ ├── __init__.py │ ├── homepage.py │ └── locators.py ├── tests/ │ ├── __init__.py │ └── sign_in.py └── setup.py
- 创建
setup.py文件,内容示例:from setuptools import setup, find_packages setup( name="test_project", version="0.1", packages=find_packages(where="src"), package_dir={"": "src"}, ) - 在项目根目录执行命令,将项目安装为可编辑模式:
pip install -e . - 此时
sign_in.py可保持from Pages.homepage import Homepage的导入方式,homepage.py用from .locators import Locator,任意目录下都能正常运行测试。
额外修正点
homepage.py存在语法错误:driver.find.element需改为driver.find_element(删除中间的点),否则导入问题解决后仍会触发运行错误。- 确保所有
__init__.py文件存在,空文件即可,它们是Python识别包的必要标志。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

