Python如何分解大类/泛型类代码结构

时间:2017-12-01 17:08:06

标签: python oop code-structure

首先,我确定之前已经问过这个问题,但是我缺乏足够的词汇来找到我正在寻找的答案。抱歉新手问题,并提前感谢您的帮助。

所以我正在创建一个python测试Web应用程序抽象层,用于未来的测试用例。我遇到的问题是我正在测试的Web应用程序是巨大的,我的课程正在失控。到目前为止,我创建的代码就是这样......

app = ApplicationUi(browser=Chrome)
app.login(USER, PASS)
app.menu_network_settings()
app.network_dns3("192.168.1.1")
app.network_save()
app.menu_user_settings()
app.user_change_password(USER, PASS)
app.logout()

所以一切正常,我正在摒弃定义所有方法,事情进展顺利。我担心的问题是这个配置应用程序中有数千个元素,我想把它分解成更小的文件。然而,我并不是最好的方法。例如,这里有一些代码结构。

class ApplicationUi(object):

    def __init__(self, url, browser="chrome"):

        display = Display(visible=0, size=(1366, 1920))
        display.start()
        self.driver = _driver_init(browser)
        self.driver.set_window_size(1366, 1920)
        self.driver.get(url)
        time.sleep(BASE_SLEEP)

    def __del__(self):
        if "driver" in self.__dict__.keys():
            self.driver.close()

    def logon(self, user, passwd):
        self.driver.find_element_by_xpath('//*[@id="userName"]').send_keys(user)
        self.driver.find_element_by_xpath('//*[@id="password"]').send_keys(passwd)
        self.driver.find_element_by_xpath('//*[@id="buttonid"]').click()
        time.sleep(BASE_SLEEP)

    def menu_audit(self):
        self.driver.find_element_by_xpath('//*[@id="toolsMenu"]/span').click()
        time.sleep(BASE_SLEEP)

    def menu_resources(self):
        self.driver.find_element_by_xpath('//*[@id="PrimaryNavigationCollapse"]/ul/li[2]/ul/li[1]/ul/li[1]').click()
        time.sleep(BASE_SLEEP)

    def menu_notifications(self):
        self.driver.find_element_by_xpath('//*[@id="PrimaryNavigationCollapse"]/ul/li[2]/ul/li[1]/ul/li[2]').click()
        time.sleep(BASE_SLEEP)

    def menu_audit(self):
        self.driver.find_element_by_xpath('//*[@id="PrimaryNavigationCollapse"]/ul/li[2]/ul/li[1]/ul/li[3]').click()
        time.sleep(BASE_SLEEP)

    def menu_network(self):
        self.driver.find_element_by_xpath('//*[@id="PrimaryNavigationCollapse"]/ul/li[2]/ul/li[1]/ul/li[4]').click()
        time.sleep(BASE_SLEEP)

    def menu_emailer(self):
        self.driver.find_element_by_xpath('//*[@id="PrimaryNavigationCollapse"]/ul/li[2]/ul/li[1]/ul/li[5]').click()
        time.sleep(BASE_SLEEP)

所以问题是将菜单和网络部分移动到自己的文件的最佳方法是什么?

我意识到我可以拥有一个只有驱动程序初始化和登录的基类,并且每个其他部分都有一个子类,但这会将我的用户代码更改为类似的内容

net = NetworkPage(BROWSER, USER, PASS)
net.dns3("192.168.1.1")
net.save()
users = UsersPage(BROWSER, USER, PASS)
users.change_password(user, password)

如果可能的话,我想保留它的使用方式,但我不确定如何实现。

我也意识到我可以将它切换到一个模块,这将允许我想要的结构,但然后(我认为)我将无法多次实例化它(用于模拟多个用户连接)。

再次感谢。

0 个答案:

没有答案