import allure from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as ec class WebKeys: # 浏览器 __init__ 初始化函数 只要实例化WebKeys 就会走到init里面打开浏览器 # webdriver.chorme 外面创建 def __init__(self,driver): self.driver=driver self.wait=WebDriverWait(self.driver, 10) # 访问不同的网址 函数传参 @allure.step("访问") def open(self,url): self.driver.get(url) # 我不知道给哪个元素加边框 1 不能2 def locator_station(self, element): self.driver.execute_script( "arguments[0].setAttribute('style',arguments[1]);", element, "border: 2px solid green;" # 边框,green绿色 ) # 元素定位 传两个参数 可以用显示等待定位元素 # visibility_of_element_located 传元组 (By.id,xxx) # 显示等待+定位 找到元素之后 要返回出去 # 为什么要返回出去 是因为后面要马上操作它 调用的时候 找到元素之后 才能进行点击进行输入 # 找到元素之后有边框 加进来封装 @allure.step("元素定位") def locator_with_wait(self,name,value): # self.driver.find_element(name,value).send_keys() # el=self.driver.find_element(name,value) # el.send_keys() locator=(name,value) el=self.wait.until(ec.visibility_of_element_located(locator)) self.locator_station(el) return el @allure.step("多元素定位") def locators_with_wait(self, name, value): locator = (name, value) el = self.wait.until(ec.visibility_of_all_elements_located(locator)) return el @allure.step("点击") def on_click(self,name,value): self.locator_with_wait(name, value).click() # 窗口切换 项目中基础操作 作家管理 @allure.step("窗口切换") def change_window(self,n): # 获取所有的窗口 获取所有的句柄 handles=self.driver.window_handles # 切换窗口 拿下标 到底拿哪个下标 self.driver.switch_to.window(handles[n]) # 文本断言 登陆的时候 # locator = ("partial link text", "章节管理") # wait.until(ec.visibility_of_element_located(locator)).click() # 为什么写返回是因为我后面需要拿这个值进行断言 返回 # 获得结果 @allure.step("获得返回结果") def text_wait(self,name,value,txt): el=(name,value) result=self.wait.until(ec.text_to_be_present_in_element(el,txt)) return result # 获得文本内容结果 @allure.step("获得返回文本") def get_text(self,name,value): el = (name, value) # result = self.wait.until(ec.visibility_of_element_located(el)).text result = self.wait.until( lambda x: x.find_element(*el).text ) return result # lamda # 断言文本内容