zoukankan      html  css  js  c++  java
  • basepage实现与封装

    思想:

    ●页面封装也可以使用组件方式。比如导航object, footer object等在多个页面重复出现的,使用组件可以增强
    代码复用性。

    简单来说就是封装导航栏中的每个页面,将通用的页面操作封装成basepage

    举例:

    将不属于该登录页面的操作拿出来,单独再封装个类

     在conftest补充实例化,方便调用

     这样page里就有两个页面了

     在写用例时继承了哪个页面就比较清晰

     数据驱动:

     

     封装公用的url

    封装通用的浏览器操作:

    from selenium.webdriver import Chrome, ActionChains, Keys
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as when
    from setting import config
    
    
    class Page:
        """通用操作
    
        1、键盘操作
        2、文件上传
        3、双击
        4、鼠标悬停
        5、右击
        6、拖动
        7、多种快捷键的封装
        8、设置某个页面的属性
        9、iframe
        10、窗口的滚动
        11、元素的滚动
        12、单选框,多选款, check
        13
        """
        host = config.host
    
        def __init__(self, driver: Chrome):
            self.browser = driver
    
        def goto(self, url):
            """去哪个url地址"""
            # url = http://wefoweowef
            if url.find('http://') != -1:
                return self.browser.get(url)
            return self.browser.get(self.host + url)
    
        def fill(self, locator, words):
            """输入框当中填入"""
            el = self.browser.find_element( *locator )
            el.send_keys(words)
    
        def click(self, locator):
            """点击"""
            wait = WebDriverWait(self.browser, timeout=5)
            condition = when.element_to_be_clickable( locator )
            element = wait.until(condition)
            # 点击操作的封装最好使用 ActionChains
            ActionChains(self.browser).click(element).perform()
    
        def double_click(self, locator):
            """双击"""
            wait = WebDriverWait(self.browser, timeout=5)
            condition = when.element_to_be_clickable(locator)
            element = wait.until(condition)
            # 点击操作的封装最好使用 ActionChains
            ActionChains(self.browser).double_click(element).perform()
    
        def drag_and_drop(self, locator1, locator2):
            """双击"""
            wait = WebDriverWait(self.browser, timeout=5)
            condition = when.element_to_be_clickable(locator1)
            element1 = wait.until(condition)
    
            condition = when.element_to_be_clickable(locator2)
            element2 = wait.until(condition)
            # 点击操作的封装最好使用 ActionChains
            ActionChains(self.browser).drag_and_drop(element1, element2).perform()
    
        def is_loaded(self, url, timeout=10):
            """判断某个 url 是否被加载"""
            return WebDriverWait(self.browser, timeout).until(when.url_contains(url))
    
        def get_element_attribute(self, locator, name):
            """获取某个元素的属性"""
            el = self.browser.find_element(*locator)
            return el.get_attribute(name)
    
        def enter(self):
            """回车"""
            return ActionChains(self.browser).send_keys(Keys.ENTER).perform()
    
        def copy(self):
            """复制的快捷键"""
            actions = ActionChains(self.browser)
            actions.key_down(Keys.CONTROL)
            actions.send_keys('c')
            actions.key_up(Keys.CONTROL).perform()
    
        def paste(self):
            """复制的快捷键"""
            actions = ActionChains(self.browser)
            actions.key_down(Keys.CONTROL)
            actions.send_keys('v')
            actions.key_up(Keys.CONTROL).perform()
    
        def set_attribute(self,locator, name, value):
            """设置元素属性"""
            el = self.browser.find_element(*locator)
            # "arguments[0].value='2021-12-07'"
            js = f'arguments[0].{name} = "{value}"'
            self.browser.execute_script(js, el)
    
        def switch_to_iframe(self, locator, timeout=10):
            """切换iframe"""
            # iframe = self.browser.find_element(*locator)
            # self.browser.switch_to.frame(iframe)
            wait = WebDriverWait(self.browser, timeout)
            wait.until(when.frame_to_be_available_and_switch_to_it(locator))
    
        def switch_to_default(self):
         """切换到主页""" self.browser.switch_to.default_content()
    def scroll_to_bottom(self): """滚动到页面底部""" js = f'window.scrollTo(0, document.body.scrollHeight)' self.browser.execute_script(js) def check(self, locator): """找到选项,点击""" pass

    封装好基本的浏览器操作就可以在写其它页面时继承这个类就好了

    basepage的作用:
    对selenium 封装浏览器操作进行二次封装(二次开发),让整个浏览器的操作变的更加容易使用。

    我们其他页面对象直接继承 basepage, 后期重点维护 basepage 操作。

  • 相关阅读:
    你的项目中使用过哪些JSTL标签?
    编程用JAVA解析XML的方式?
    用jdom解析xml文件时如何解决中文问题?如何解析?
    SpringMVC 的核⼼⼊⼝类是什么?Struts1,Struts2 的分别是什么?
    SpringMVC 的异常处理 ?
    SpringMVC 里面拦截器如何写?
    谈谈Hibernate中inverse的作用?
    Hibernate中session有几种创建方式?都有那些区别?
    Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)?
    Shiro认证过程?
  • 原文地址:https://www.cnblogs.com/wsfsd/p/15662622.html
Copyright © 2011-2022 走看看