社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

python&page对象:由于循环导入,其他页面无法继承公共部分

Назарій Кушнір • 4 年前 • 188 次点击  

在开发一个由几个页面组成的web应用程序的自动化框架示例时出现了问题。因此:

  1. 项目结构如下-所有页面类位于 pages 包装 ***_page.py 分开的文件
  2. 有一些常见的顶部菜单,用于登录用户的所有页面。此菜单包含导航到其中任何一个页面的按钮
  3. 为了避免代码重复,我创建了此菜单 TopPart 单独上课 pages\top_part.py 文件,其中包括按钮web元素和导航到相关页面的方法。因为每个方法都返回新的相关页对象,所以我需要将它们的类导入到 top_part.py
from selenium.webdriver.common.by import By
import pages.myinfo_page
import pages.time_page
import pages.admin_page
import pages.dashboard_page


class TopPart(object):

    def __init__(self, driver: WebDriver):
        self.driver = driver
        self.dashboard_module = self.driver.find_element(By.ID, "menu_dashboard_index")
        self.admin_module = self.driver.find_element(By.ID, "menu_admin_viewAdminModule")
        self.time_module = self.driver.find_element(By.ID, "menu_time_viewTimeModule")
        self.myinfo_module = self.driver.find_element(By.ID, "menu_pim_viewMyDetails")

    def to_dashboard_module(self):
        self.dashboard_module.click()
        return pages.dashboard_page.DashboardPage(self.driver)

    def to_admin_module(self):
        self.admin_module.click()
        return pages.admin_page.AdminPage(self.driver)

    def to_time_module(self):
        self.time_module.click()
        return pages.time_page.TimePage(self.driver)

    def to_myinfo_module(self):
        self.myinfo_module.click()
        return pages.myinfo_page.MyInfoPage(self.driver)
  1. 现在,要将这些用于所有特定的页面,即。 DashboardPage 我想继承 顶端 类,而我目前所知的将类设置为父类的唯一方法是直接 from dashboard_page 如下所示:
from selenium.webdriver.remote.webdriver import WebDriver
from pages.top_part import TopPart


class DashboardPage(TopPart):

    def __init__(self, driver: WebDriver):
        super().__init__(driver)

因此,由于循环导入而出现错误:

ImportError: cannot import name 'TopPart' from partially initialized module 'pages.top_part' (most likely due to a circular import)

  1. 有没有办法用绝对法 import pages.top_part 顶端 从类继承?只是 class DashboardPage(pages.top_part.TopPart): 不起作用
  2. 顶端 但我不知道是否可以实现,除了只在那里保留按钮web元素初始化,并将方法声明移动到pages类-这将导致每个页面都有大量重复的代码

?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/99360
 
188 次点击