selenium定位方法的封装,定位和随机选择截屏

import random
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec


class Base:

    def __init__(self,browser = "c",url = r"ip地址"):
        """
        实现浏览器选择和窗口最大化和输入网址
        :param browser: 浏览器名字:目前只支持谷歌和火狐浏览器:默认是谷歌浏览器
        :param url: 被的平台的url
        """
        if browser == "c" or browser == "C" or browser == "Chrome":
            self.driver = webdriver.Chrome()
        elif browser == "f" or browser == "F" or browser == "Firefox":
            self.driver = webdriver.Firefox()
        else:
            raise NameError("请输入正确的浏览器名字!!!")
        # 最大化窗口
        self.driver.maximize_window()
        # 输入网址
        self.driver.get(url)

    def _location_element(self,method,value, num = "dan"):
        """
        定位元素
        :param method: 定位方法
        :param value: 定位方法所对应的值
        :param num: 选择单个还是多个,默认单个
        :return: 返回定位到的元素
        """
        if method == "i" or method == "id":
            locator = (By.ID,value)
        elif method == "n":
            locator = (By.NAME,value)
        elif method == "t":
            locator = (By.TAG_NAME,value)
        elif method == "c":
            locator = (By.CLASS_NAME,value)
        elif method == "x":
            locator = (By.XPATH,value)
        elif method == "l":
            locator = (By.LINK_TEXT,value)
        elif method == "p":
            locator = (By.PARTIAL_LINK_TEXT,value)
        elif method == "s":
            locator = (By.CSS_SELECTOR,value)
        else:
            raise NameError("请输入正确的定位方法")
        if num == "dan":
            # return self.driver.find_element(*locator)
            return WebDriverWait(self.driver,30,1).until(ec.presence_of_element_located(locator))
        else:
            # return self.driver.find_elements(*locator)
            return WebDriverWait(self.driver,30,1).until(ec.presence_of_all_elements_located(locator))

    def send_keys(self,method,value,value1):
        """
        对元素进行输入操作
        :param method: 定位方法
        :param value: 定位方法所对应的值
        :param value1: 需要输入的内容
        :return:
        """
        ele = self._location_element(method,value)
        ele.clear()
        ele.send_keys(value1)

    def click(self,method, value):
        """
        对元素进行点击操作
        :param method: 定位方法
        :param value: 定位方法所对应的值
        :return:
        """
        self._location_element(method, value).click()

    def switch_to_frame(self,method,value):
        """
        进入iframe框架
        :param method:
        :param value:
        :return:
        """
        ele = self._location_element(method,value)
        self.driver.switch_to.frame(ele)

    def switch_to_parent_frame(self):
        """
        退到父级框架
        :return:
        """
        self.driver.switch_to.parent_frame()

    def switch_to_default_content(self):
        """
        退到最外层框架
        :return:
        """
        self.driver.switch_to.default_content()

    def random_choice(self,method,value):
        """
        在可迭代对象中随机选择一个进行点击
        :param method: 定位方法
        :param value: 定位方法所对应的值
        :return:
        """
        sex = self._location_element(method,value,num="fu")
        random.choice(sex).click()

    def select_by_visible_text(self,method,value,text):
        """
        select下拉框通过文本定位
        :param method:
        :param value:
        :param text:
        :return:
        """
        ele = self._location_element(method,value)
        Select(ele).select_by_visible_text(text)

    def select_by_index(self,method,value,index):
        """
        select下拉框通过索引定位
        :param method:
        :param value:
        :param text:
        :return:
        """
        ele = self._location_element(method,value)
        Select(ele).select_by_index(index)

    def select_by_value(self,method,value,value1):
        """
        select下拉框通过value定位
        :param method:
        :param value:
        :param text:
        :return:
        """
        ele = self._location_element(method,value)
        Select(ele).select_by_value(value1)

    def two_element(self,by1 = By.ID,value1 = None,by2 = By.TAG_NAME,value2=None):
        """
        对元素进行二次定位
        :param by1:父级的定位方法
        :param value1: 父级定位方法对应的值
        :param by2: 子级的定位方法
        :param value2: 子级定位为方法所对应的值
        :return:
        """
        ele_dept = self.driver.find_element(by1,value1).find_elements(by2,value2)
        random.choice(ele_dept).click()

    def get_text(self,method,value):
        """
        获取文本
        :param method: 定位方法
        :param value: 定位方法所对应的值
        :return: 文本
        """
        return self._location_element(method,value).text

    def switch_to_alert_text(self):
        """
        获取alert弹框的文本
        :return:
        """
        return self.driver.switch_to.alert.text

    def click_alert_dismiss(self):
        """
        点击alert弹框上的取消
        :return:
        """
        self.driver.switch_to.alert.dismiss()

    def click_alert_accept(self):
        """
        点击alert弹框上的确定
        :return:
        """
        self.driver.switch_to.alert.accept()

    def quit(self):
        """
        杀进程
        :return:
        """
        self.driver.quit()

    def save_screenshot(self,filename):
        """
        当前窗口截图
        :param filename:
        :return:
        """
        self.driver.save_screenshot(filename)

    def get_screenshot_as_file(self,filename):
        """
        当前窗口截图
        :param filename:
        :return:
        """
        self.driver.get_screenshot_as_file(filename)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Super丶洪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值