Selenium实战丨base层的配置


# 2020-8-10

进行了更新以及修改一些方法

增加了日志功能

 

其实这几天空下来,一直在想我该用什么方法去写Base层的配置。

也去B站上看了几个PO模式。他们大都是简单举例,以及讨论设计思路。大都是基于面对对象写的。然后用继承去使用。

好了,上代码吧,以下代码是根据个人想法所写,不一定要参考博主的,你可以采用你自己喜欢的方式去写。主要是二次封装为个人使用,所以不讲究格式等写法。怎么简单怎么来吧。以下为个人常用的四个定位法以及发送参数、点击和执行JavaScript语法

Base/base_function.py

from selenium import webdriver
from selenium.webdriver import ActionChains

from Common.Log import Log
from Common.get_function import get_project_url


class Base:
    def __init__(self):
        # 设置一下打开即最大化已经屏蔽监听
        options = webdriver.ChromeOptions()
        options.add_argument('--start-maximized')
        options.add_experimental_option('excludeSwitches', ['enable-logging'])
        self.driver = webdriver.Chrome(options=options)
        self.url = get_project_url()
        self.log = Log().log()

    def get_url(self):
        self.driver.get(self.url)

    def get_driver(self, driver):
        if driver:
            return driver
        else:
            return self.driver

    def find_e(self, zen, element, driver=None):
        driver = self.get_driver(driver)
        if zen == 'xe':
            self.log.info(f"通过Xpath定位,元素为{element}")
            return driver.find_element_by_xpath(element)
        elif zen == 'cne':
            self.log.info(f"通过ClassName定位,元素为{element}")
            return driver.find_element_by_class_name(element)
        elif zen == 'ie':
            self.log.info(f"通过Id定位,元素为{element}")
            return driver.find_element_by_id(element)
        elif zen == 'ne':
            self.log.info(f"通过name定位,元素为{element}")
            return driver.find_element_by_name(element)
        elif zen == 'cse':
            self.log.info(f"通过CSS定位,元素为{element}")
            return driver.find_element_by_css_selector(element)

    def e_send_key(self, zen, element, value, driver=None):
        driver = self.get_driver(driver)
        self.find_e(zen, element, driver).clear()
        self.find_e(zen, element, driver).send_keys(value)

    def e_click(self, zen, element, driver=None):
        driver = self.get_driver(driver)
        self.find_e(zen, element, driver).click()

    def e_clear_select(self):
        ActionChains(self.driver).move_by_offset(0, 0).click().perform()


if __name__ == "__main__":
    a = Base
    print(a.get_url())