zoukankan      html  css  js  c++  java
  • Python 封装点击、获取文本等方法工具类

    # coding=utf-8
    import os
    
    from selenium.common.exceptions import ElementNotInteractableException, ElementClickInterceptedException
    from selenium.webdriver import ActionChains
    import time
    from selenium.webdriver.common.keys import Keys
    from base.find_element import FindElement
    
    
    class BasePage(object):
        def __init__(self, driver, url=None):
            self.driver = driver
            self.url = url
            self.element = FindElement(driver)
    
        def open(self):
            self.driver.get(url=self.url)
    
        # 输入文本框
        def send_keys(self, element, text):
            self.clear(element)
            element.send_keys(text)
    
        # 回车
        @staticmethod
        def enter(element):
            element.send_keys(Keys.ENTER)
    
        # 复制
        @staticmethod
        def ctrl_c(element):
            element.send_keys(Keys.CONTROL, 'c')
    
        # 粘贴
        @staticmethod
        def ctrl_v(element):
            element.send_keys(Keys.CONTROL, 'v')
    
        # 刷新
        def refresh(self):
            self.driver.refresh()
    
        # 点击事件
        @staticmethod
        def click(element):
            try:
                element.click()
            except (AttributeError, ElementNotInteractableException, ElementClickInterceptedException) as e:
                raise e
    
        # 上传文件
        @staticmethod
        def upload_file(element, file_path):
            try:
                element.send_keys(file_path)
            except AttributeError as e:
                print(e)
    
        # 清空文本框内容
        @staticmethod
        def clear(element):
            element.send_keys(Keys.CONTROL + 'a')
            element.send_keys(Keys.BACKSPACE)
    
        # 鼠标悬停
        def hover(self, element, link_text):
            ActionChains(self.driver).move_to_element(element).perform()
            time.sleep(5)
            self.driver.find_element_by_link_text(link_text=link_text).click()
    
        # 鼠标悬停事件-js方式实现
        def hover_by_js(self, element):
            js = """
                    var evObj = document.createEvent('MouseEvents'); 
                    evObj.initMouseEvent("mouseover",true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
                    arguments[0].dispatchEvent(evObj);
                """
            # more_menu = webElement
            self.driver.execute_script(js, element)
            time.sleep(2)
    
        # 将滚动条拖动到需要显示的元素位置
        def scroll_by_js(self, element):
            self.driver.execute_script("arguments[0].scrollIntoView();", element)
            time.sleep(1)
    
        # 元素定位相互覆盖,导致无法点击,采用js点击
        def click_by_js(self, element):
            self.driver.execute_script("arguments[0].click()", element)
    
        # 获取元素文本内容
        @staticmethod
        def get_element_text(element):
            if element:
                return element.text
            return element
    
        # 获取元素的value值
        @staticmethod
        def get_element_value(element):
            if element:
                return element.get_attribute("value")
            return element
    
        @staticmethod
        def is_enabled(element):
            """Returns whether the element is enabled."""
            return element.is_enabled()
    
        # 判断单个元素是否在DOM里面 (是否存在)
        @staticmethod
        def is_element_exist(element):
            if element:
                return True
            else:
                return False
    
        # 判断元素是否被选中,返回bool值 及点(选中/取消选中)
        @staticmethod
        def is_selected(element):
            # 如果type参数为空,返回元素是否为选中状态,True/False (默认)
            bools = element.is_selected()
            if bools:
                return True
            else:
                return False
    
        # 退出所有浏览器
        def quit(self):
            self.driver.quit()
            # 清除chromedriver进程
            # os.system('taskkill /im chromedriver.exe /F')
    
        # 关闭当前浏览器
        def close(self):
            self.driver.close()
    
        # 移除元素的readonly属性,如:根据日期查询
        def remove_readonly(self, element):
            self.driver.execute_script('arguments[0].removeAttribute("readonly")', element)
    
        # 采用js方式,为元素设置value值
        def set_value_js(self, value, element):
            scripts = "arguments[0].value = '{}'".format(value)
            self.driver.execute_script(scripts, element)
    
        # 切换新的窗口 num为索引值 0为之前标签页,1为切换之后标签页
        def switch_to_window(self, num):
            # windows 为list
            windows = self.driver.window_handles
            # 若windows的长度为1,则新标签页打开失败
            if len(windows) == 1:
                return False
            else:
                try:
                    self.driver.switch_to_window(windows[num])
                except IndexError as e:
                    raise e
    
        # 获取当前标签页的 url
        @property
        def get_current_url(self):
            return self.driver.current_url
    不积跬步,无以至千里;不积小流,无以成江海。
  • 相关阅读:
    poj 2187 Beauty Contest(旋转卡壳)
    poj 2540 Hotter Colder(极角计算半平面交)
    poj 1279 Art Gallery(利用极角计算半平面交)
    poj 3384 Feng Shui(半平面交的联机算法)
    poj 1151 Atlantis(矩形面积并)
    zoj 1659 Mobile Phone Coverage(矩形面积并)
    uva 10213 How Many Pieces of Land (欧拉公式计算多面体)
    uva 190 Circle Through Three Points(三点求外心)
    zoj 1280 Intersecting Lines(两直线交点)
    poj 1041 John's trip(欧拉回路)
  • 原文地址:https://www.cnblogs.com/xuezhimin-esage-2020/p/14484791.html
Copyright © 2011-2022 走看看