在开发一个由几个页面组成的web应用程序的自动化框架示例时出现了问题。因此:
-
项目结构如下-所有页面类位于
pages
包装
***_page.py
分开的文件
-
有一些常见的顶部菜单,用于登录用户的所有页面。此菜单包含导航到其中任何一个页面的按钮
-
为了避免代码重复,我创建了此菜单
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)
-
现在,要将这些用于所有特定的页面,即。
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)
-
有没有办法用绝对法
import pages.top_part
顶端
从类继承?只是
class DashboardPage(pages.top_part.TopPart):
不起作用
-
-
顶端
但我不知道是否可以实现,除了只在那里保留按钮web元素初始化,并将方法声明移动到pages类-这将导致每个页面都有大量重复的代码
?