从零开始搭建WEB自动化框架03 —— 元素类

更多内容请查看:
从零开始搭建WEB自动化框架01 —— Pytest 使用
从零开始搭建WEB自动化框架02 —— POM 设计模式

本系列学习文章适合的对象为已经掌握 Selenium 基础用法,并有一定实践经验的同学。同时,希望你可以理解 Page Object Model 设计模型。

开始本篇前,请确认已经完成此前文章的阅读。

什么是类?

其实照本宣科是很容易的,复制粘贴是很容易的,但是将之转化为自己的能力是需要花精力的。
为了更好地理解元素类的使用,已经后续的更多变化,首先需要理解什么是类?
类就是具体事务中提取出来的共性。
我们在做自动化测试的时候,有很多元素,比如input,button,text。
那它们有什么共性呢?
比如 button 标签和 text 标签有什么共性?
首先能想到的是,他们都有具体的描述文字内容,都可能有类这些元素。
其次,有时候有些网站的 text 其实承担了一部分的 button 的作用,所以可点击也会是共性。
这是我自己总结的,或许有更多我不知道的共性,每个人都可以按自己的实际情况处理。
带着这样的思考,我们来看一下元素类究竟怎么写。

元素类

别的也不多说了,直接先上代码。

class TextView(Element):
    def get_text(self):
        return self.get_element().text

    def get_class(self):
        return self.get_element().get_attribute('class')

class Button(TextView):
    def click(self):
        ac = ActionChains(self.driver)
        el = self.get_element()
        try:
            ac.move_to_element(el).click().perform()
        except MoveTargetOutOfBoundsException:
            self.driver.execute_script("arguments[0].click();", el)
        except Exception:
            time.sleep(2)
            ac.move_to_element(el).click().perform()

    def double_click(self):
        try:
            self.click()
            self.click()
        except Exception:
            time.sleep(2)
            self.click()
            self.click()

class InputView(TextView):
    def input(self, text):
        if text != '':
            try:
                self.get_element().clear()
                self.get_element().send_keys(text)
            except Exception:
                time.sleep(2)
                self.get_element().clear()
                self.get_element().send_keys(text)

Element 类为最基础类,里面包含了很多基础信息的获取,包括父子节点,元素信息获取等,这里先不给出,后续有兴趣的同学可以进入我的github查看。
继承 Element 的类为 TextView,里面只有两个方法获取文字和 class ,这两个属性,在自动化需要用到的元素中,基本上都会存在。
随后就是 Button 和 InputView 去继承 TextView 了。
上面说到的可以点击的 Text 在自动化测试中统一都归到 Button 类中初始化。

这样的话,基础的元素数据就完成了,有时候会有一些特殊的元素,只要按照对应的特性继承 Element 或者 TextView 即可。

完成了元素类之后,我们就需要将元素类使用到具体的页面当中,将一个个页面,结构成一个个由元素组成的页面类。

你可能感兴趣的:(从零开始搭建WEB自动化框架03 —— 元素类)