PO模式自建包导入之test无法找到base(ModuleNotFoundError: No module named ‘xxx‘)

本人在自学PO模式时遇见一个困扰本人近一个星期的问题,这是一段非常痛苦的经历,本人遇见了且在查阅多个资料下终于找到了问题的答案。这是一个关于'.'英文句点!!!的故事。

在本人被临时拉来学习软测中的‘自动化测试’、‘功能测试用例编写’和‘功能测试(找BUG)’时,在学自动化测试要求使用PO模式,根据‘CSDN’和‘小破站’找到的资料学习中有一个问题一直令人不解,程序写对了,该写的模块写完了,该导的自建包也导了,该导入的数据也导了,pycharm编辑器也没任何的错误反馈,测试运行就是一直报错‘ModuleNotFoundError: No module named ‘xxx‘‘。本人在这只说明本人遇到的,其它的类如‘ModuleNotFoundError: No module named ‘xxx‘可能的解决方案’本人并不写入,其他博主可能发过很多类似的。

在这本人自作多情的介绍一下本人目前理解的PO模式:‘PO层’指一个页面即一个对象,只要发生页面跳转,就要创建一个新的.py文件去写新的内容,但在写对象之前要把基础的‘Base层’写好,当你把基础的‘Base层’和对象的‘PO层’写好了就需要一个有运行逻辑的‘Test层’创建出来(注:上述这三层都在不同的软件包下,且这三个软件包都在同一个根目录包下)。

就在本人写完上述所说的所有内容时检查了也确定了没有问题就运行test*.py(注:‘test*’指的是test开头py文件)测试本人所写的程序代码 结……果……!!!程序报了一个错误‘ModuleNotFoundError: No module named ‘xxx‘’这是让我万万没想到的。

请看下图(本人鼠标手写的):

PO层的p1、p2和p3都继承了Base层的base,Test层的test都继承了PO层的p1、p2和p3,那么Test层的test间接性继承了Base层的base,可是正式因为Test层的test无法找到Base层的base所以产生了‘ModuleNotFoundError: No module named ‘xxx‘‘错误。

源码如下(注:有些许部分涉及到秘密内容,故被本人给删掉了!!!):

base.py

from selenium import webdriver


class Bp:

    def __init__(self, driver):
        self.driver = driver  # type:webdriver

    def openUrl(self, url):
        self.driver.get(url)

    def element(self, loc):
        return self.driver.find_element(*loc)

p1.py

from selenium.webdriver.common.by import By

from .BasePage import Bp

import time


class Lp(Bp):
    url = ''
    user = By.ID, ''
    pas = By.NAME, ''
    cli = By.TAG_NAME, ''

    def inpop(self, value):
        self.element(self.user).send_keys(value)

    def inpop1(self, value1):
        self.element(self.pas).send_keys(value1)

    def inpop2(self):
        self.element(self.cli).click()

    def lps(self, value1, value2):  # 注:因程序运行太快了网页跟不上故加上了强制等待1秒
        self.openUrl(self.url)
        time.sleep(1)
        self.inpop(value1)
        time.sleep(1)
        self.inpop1(value2)
        time.sleep(1)
        self.inpop2()
        time.sleep(1)

p2.py

from selenium.webdriver.common.by import By
from .BasePage import Bp

import time


class Ap(Bp):
    text = By.PARTIAL_LINK_TEXT, ''
    ll = By.XPATH, ''
    title = By.ID, ''
    code = By.ID, ''
    ls = By.XPATH, ''

    def aptext(self):
        self.element(self.text).click()

    def apll(self):
        self.element(self.ll).click()

    def aptitle(self, value):
        self.element(self.title).send_keys(value)

    def apcode(self, value):
        self.element(self.code).send_keys(value)

    def apls(self):
        self.element(self.ls).click()

    def aps(self, value1, value2):  # 注:因程序运行太快了网页跟不上故加上了强制等待1秒
        self.aptext()
        time.sleep(1)
        self.apll()
        time.sleep(1)
        self.aptitle(value1)
        time.sleep(1)
        self.apcode(value2)
        time.sleep(1)
        self.apls()
        time.sleep(1)

test.py

from selenium import webdriver
import unittest
import ddt
import time
import csv

from PoTest.Page.LoginPage import Lp
from PoTest.Page.AddPage import Ap


@ddt.ddt
class test(unittest.TestCase):

    def setUp(self) -> None:
        self.driver = webdriver.Chrome()

    def tearDown(self) -> None:
        self.driver.quit()

    @ddt.data(*[i for i in csv.reader(open(r'', encoding='UTF-8'))])
    @ddt.unpack
    def test_date(self, name, code):
        Lp(self.driver).lps(value1='student', value2='student')
        time.sleep(1)
        Ap(self.driver).aps(value1=name, value2=code)
        time.sleep(1)


if __name__ == '__main__':
    unittest.main()

观看以上代码程序想必细心的已经发现有什么不同了吧,对、没错、就是p1、p2导入base时加上的’.‘英文句点,不加的话本人确实看不出有什么问题,但是test却无法访问,所以才照成的报错。

关于英文句点的解释我个人看到的有三种:

第一种:在编程语言中,英文句点通常是属性访问符,在 python 中一切皆对象,句点用来访问对象的属性或者方法。

第二种:句点就是一个语法中的“的”,表达的是对象之间的从属关系。

第三种:英文句点通常是属性访问符,在 python 中一切皆对象,句点用来访问对象的属性或者方法。

我个人看法本文所写的更倾向于第二种!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ModuleNotFoundError: No module named 'urldate'是Python的一个错误提示,意味着在你的代码中尝试导入名为'urldate'的模块或包时找不到该模块或包。根据引用中的解释,Python中的模块是以.py文件的形式存在的,而包是具有_init_.py文件的目录。当你在代码中使用import语句导入模块或包时,Python会搜索sys.path中的目录来查找该模块或包。如果找不到对应的模块或包,就会出现ModuleNotFoundError错误。 根据引用和引用的描述,这个错误可能是因为你尝试导入名为'urldate'的模块或包,但实际上不存在这个模块或包。你可以检查一下你的代码,确认是否正确导入了该模块或包的名称。如果确实需要使用'urldate'模块或包,你可能需要先安装它,可以使用pip等工具安装所需的模块或包,然后再尝试导入。 总之,ModuleNotFoundError: No module named 'urldate'错误提示表明你的代码中试图导入一个不存在的模块或包,请检查你的代码和相应的导入语句,并确保模块或包的名称是正确的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python模块导入出现ModuleNotFoundError: No module named ‘***’](https://download.csdn.net/download/weixin_38658085/14885867)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [PO模式自建包导入test无法找到baseModuleNotFoundError: No module namedxxx‘)](https://blog.csdn.net/qq_62845367/article/details/129624263)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值