Sheldon墨鱼 发表于 2020-4-13 16:13:38

python导入多个类,如何在当前新类的不同方法中分别各自调用导入类的实例的方法?

本帖最后由 Sheldon墨鱼 于 2020-4-13 16:16 编辑

各位大神,我最近在学 python + selenium 的 webUI 自动化测试,
遇到一个关于python语法知识的问题:

如下图,是我的项目结构:



我在当前的 ./testCases/test.py 中引入了 ./pageobjects/group.py & login.py 这 2 个 py;

pageobjects下的两个 py 文档又继承了 ./framework/base.py 父类;

然后,test.py 在新类中对引入的类进行实例化,在新类的不同多个方法中分别各自调用类实例的方法。

程序报错,报错的内容是在执行第二个方法时,无法定位到元素。
而如果,我在 test.py 中只用一个方法调用不同的类实例的方法,则可以成功。

说了一大堆,代码如下:


import unittest
from framework.browser_engine import BrowserEngine
from pageobjects.login_page import LoginPage
from pageobjects.group_page import GroupPage


class CreateGroup(unittest.TestCase):
    """新增一个分组"""
    driver = None# 定义一个全局的 driver

    @classmethod
    def setUpClass(cls):

      browser = BrowserEngine(cls)
      cls.driver = browser.open_browser(cls)
      cls.login_page = LoginPage(cls.driver)# 引入的类的实例化
      cls.group_page = GroupPage(cls.driver)
               
# 新类的第一个方法,先用了第一个实例的方法
    def test_login(self):
      """登录"""
      self.login_page.login_account('jctest1', 'admin123')
      self.login_page.send_submit_btn()
      time.sleep(2)
               
# 第二个方法中,又用了第二个实例的方法
               
# 也就是在这里开始报错,无法定位的

    def test_create_group(self):
      """新增活动"""
      self.group_page.create_group()
      self.group_page.mapping_group_name()
               
        # 又回到第一个实例的方法
    def test_logout(self):
      """用户登出"""
      self.login_page.logout()

    @classmethod
    def tearDownClass(cls):

      cls.driver.quit()


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



而如果这个新类中只有一个方法,则可以成功定位到元素,如下:

```

import unittest
from framework.browser_engine import BrowserEngine
from pageobjects.login_page import LoginPage
from pageobjects.group_page import GroupPage


class CreateGroup(unittest.TestCase):
    """新增一个分组"""
    driver = None

    @classmethod
    def setUpClass(cls):

      browser = BrowserEngine(cls)
      cls.driver = browser.open_browser(cls)
      cls.loginpage = LoginPage(cls.driver)
      cls.group_page = GroupPage(cls.driver)
       
#这个方法里,既有实例 A,又有实例 B 的方法
    def test_create_group(self):
      """新增活动"""
      self.loginpage.login_account('jctest1', 'admin123')
      self.loginpage.send_submit_btn()

      self.group_page.create_group()

      self.group_page.mapping_group_name()

    @classmethod
    def tearDownClass(cls):

      cls.driver.quit()


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


```

所以,要怎么修改比较好呐?
先行谢过!

Sheldon墨鱼 发表于 2020-4-13 18:15:27

描述得很复杂,感觉是参数 driver 在传参过程不一致导致的。但是不知道怎么修改。
页: [1]
查看完整版本: python导入多个类,如何在当前新类的不同方法中分别各自调用导入类的实例的方法?