ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用装饰器进行重构以减少代码量

2019-10-26 23:55:38  阅读:185  来源: 互联网

标签:selenium nose python


我最近切换到一个新项目,并且我们所有的硒测试都是用Python编写的.我想知道我是否可以通过使用装饰器来减少代码量

我们现在得到的是:

class BasePage(object):
    view_button = ".//a[text()='View']"
    create_button = ".//a[text()='Create']"
    #some code here

class BaseTestCase(unittest.TestCase):
    setUpclass(cls):
    #code here

    def find(cls,xpath):
        return cls.driver.find_element_by_xpath(xpath)


class SomeTest(BaseTestCase):
    def test_00_something(self):
        self.find(self.view_button).click()

我在想有一种方法可以将Wholeself.find(self.view_button).click()最小化为click.view_button

我听说可以使用装饰器完成此操作,但是作为Java语言的人,我在此方面获得的成功很少.

解决方法:

您还可以检查以下解决方案;使用创建新模块-navigation.py:

class Button():

    def __init__(self,driver, locator):
        self.driver = driver
        self.locator = locator

    @property
    def click(self):
        return self.driver.find_element_by_xpath(self.locator).click()

class Navigation():

    """NAVIGATION COMMANDS """
    def goTo(self):
        #somethign

    def previousPage(self):
        #something

    """ BUTTONS """
    @property
    def view_button(self):
        xpath = ".//a[text()='View']"
        view = Button(self.driver,xpath)
        return view

   @property
   def create_button(self):
       xpath = ".//a[text()='Create']"
       create = Button(self.driver,xpath)
       return create

在basetestcase.py中:

class BaseTestCase(unittest.TestCase, Navigation)

      setUpClass(cls):
      #somethign here

并且您的测试用例将如下所示:

class TestSomething(BaseTestCase):

     def test_99_somethign(self):
         #finds .//a[text()='View'] and clicks
         self.view.click

         #create button
         self.create_button.click

这样,您将可以在测试中使用导航类.另外,您可以将所有导航元素放在一个位置

标签:selenium,nose,python
来源: https://codeday.me/bug/20191026/1940474.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有