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)
12-20