WebKeys.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import allure
  2. from selenium.webdriver.common.by import By
  3. from selenium.webdriver.support.wait import WebDriverWait
  4. from selenium.webdriver.support import expected_conditions as ec
  5. class WebKeys:
  6. # 浏览器 __init__ 初始化函数 只要实例化WebKeys 就会走到init里面打开浏览器
  7. # webdriver.chorme 外面创建
  8. def __init__(self,driver):
  9. self.driver=driver
  10. self.wait=WebDriverWait(self.driver, 10)
  11. # 访问不同的网址 函数传参
  12. @allure.step("访问")
  13. def open(self,url):
  14. self.driver.get(url)
  15. # 我不知道给哪个元素加边框 1 不能2
  16. def locator_station(self, element):
  17. self.driver.execute_script(
  18. "arguments[0].setAttribute('style',arguments[1]);",
  19. element,
  20. "border: 2px solid green;" # 边框,green绿色
  21. )
  22. # 元素定位 传两个参数 可以用显示等待定位元素
  23. # visibility_of_element_located 传元组 (By.id,xxx)
  24. # 显示等待+定位 找到元素之后 要返回出去
  25. # 为什么要返回出去 是因为后面要马上操作它 调用的时候 找到元素之后 才能进行点击进行输入
  26. # 找到元素之后有边框 加进来封装
  27. @allure.step("元素定位")
  28. def locator_with_wait(self,name,value):
  29. # self.driver.find_element(name,value).send_keys()
  30. # el=self.driver.find_element(name,value)
  31. # el.send_keys()
  32. locator=(name,value)
  33. el=self.wait.until(ec.visibility_of_element_located(locator))
  34. self.locator_station(el)
  35. return el
  36. @allure.step("多元素定位")
  37. def locators_with_wait(self, name, value):
  38. locator = (name, value)
  39. el = self.wait.until(ec.visibility_of_all_elements_located(locator))
  40. return el
  41. @allure.step("点击")
  42. def on_click(self,name,value):
  43. self.locator_with_wait(name, value).click()
  44. # 窗口切换 项目中基础操作 作家管理
  45. @allure.step("窗口切换")
  46. def change_window(self,n):
  47. # 获取所有的窗口 获取所有的句柄
  48. handles=self.driver.window_handles
  49. # 切换窗口 拿下标 到底拿哪个下标
  50. self.driver.switch_to.window(handles[n])
  51. # 文本断言 登陆的时候
  52. # locator = ("partial link text", "章节管理")
  53. # wait.until(ec.visibility_of_element_located(locator)).click()
  54. # 为什么写返回是因为我后面需要拿这个值进行断言 返回
  55. # 获得结果
  56. @allure.step("获得返回结果")
  57. def text_wait(self,name,value,txt):
  58. el=(name,value)
  59. result=self.wait.until(ec.text_to_be_present_in_element(el,txt))
  60. return result
  61. # 获得文本内容结果
  62. @allure.step("获得返回文本")
  63. def get_text(self,name,value):
  64. el = (name, value)
  65. # result = self.wait.until(ec.visibility_of_element_located(el)).text
  66. result = self.wait.until(
  67. lambda x: x.find_element(*el).text
  68. )
  69. return result
  70. # lamda
  71. # 断言文本内容