• Selenium基础 — Selenium中的expected_conditions模块(二)


    3、expected_conditions模块独立使用

    我们练习expected_conditions模块中两个功能,其他功能参照即可。

    1. # 1.导入selenium
    2. from selenium import webdriver
    3. from time import sleep
    4. from selenium.webdriver.support import expected_conditions as EC
    5. # 2.打开Chrome浏览器
    6. driver = webdriver.Chrome()
    7. # 3.打开注册A页面
    8. url = "https://www.baidu.com"
    9. driver.get(url)
    10. sleep(3)
    11. # 4.EC模块的使用
    12. """
    13. 1.EC模块单独使用的语法
    14. EC.方法(参数)(driver) 或 EC.方法(参数).__call__(driver)
    15. 2.说明
    16. 我们可以查看title_is()源码
    17. class title_is(object):
    18. def __init__(self, title):
    19. self.title = title
    20. def __call__(self, driver):
    21. return self.title == driver.title
    22. 我们可以看到,直接使用EC模块,就需要调用__call__()方法
    23. 而__call__()方法是魔法方法,调用方式,就是上面1所说的两种方式。
    24. """
    25. # 4.1 EC模块中title_is()的使用
    26. # 判断网页title是否是特定文本
    27. # 正确匹配
    28. title_is_result_True = EC.title_is("百度一下,你就知道")(driver)
    29. print("title_is结果 =", title_is_result_True)
    30. # 错误匹配
    31. title_is_result_False = EC.title_is("百度一下,你就知道1").__call__(driver)
    32. print(f"title_is结果 = {title_is_result_False}")
    33. # 4.2 EC模块中presence_of_element_located(locator)的使用
    34. # presence_of_all_elements_located(locator)同理
    35. # 定位元素单数
    36. # 定位百度首页输入框
    37. # 4.2.1编写locator(定位器)
    38. # 正确定位
    39. input_locator_True = ("id", "kw")
    40. # 错误定位
    41. input_locator_False = ("id", "kw1")
    42. # 4.2.2 执行EC模块方法
    43. element_located_True = EC.presence_of_element_located(input_locator_True).__call__(driver)
    44. print("element_located结果 =", element_located_True)
    45. # 定位不到会报错
    46. # element_located_False = EC.presence_of_element_located(input_locator_False)(driver)
    47. # 5.关闭浏览器
    48. sleep(2)
    49. driver.quit()

    4、expected_conditions模块综合使用

    WebDriverWait类和until()方法和EC模块这种组合的使用方法练习。
    (1)title_is(title)示例
    这个title_is(title)例子很简单,作为一个入门示例。

    1. """
    2. 1.学习目标
    3. 掌握EC模块中title_is的使用
    4. 2.操作步骤(语法)
    5. 2.1 EC模块通用使用方法
    6. EC模块通常和WebDriverWait配合使用
    7. WebDriverWait(driver,timeout).until(EC.方法)
    8. 2.2 title_is(指定的标题)
    9. 判断页面标题是否和指定的标题一致,如果一致返回True,不一致返回Palse
    10. result=WebDriverWait(driver,timeout).until(EC.title_is(指定的标题))
    11. print(result)
    12. 3.需求
    13. 使用title_is判断百度首页的标题title
    14. """
    15. # 1.导入selenium
    16. from selenium import webdriver
    17. from time import sleep
    18. from selenium.webdriver.support import expected_conditions as EC
    19. from selenium.webdriver.support.wait import WebDriverWait
    20. # 2.打开谷歌浏览器
    21. driver = webdriver.Chrome()
    22. # 3.输入网址
    23. url = "https://www.baidu.com"
    24. driver.get(url)
    25. sleep(3)
    26. # 4.验证页面标题
    27. result = WebDriverWait(driver, 5).until(EC.title_is("百度一下,你就知道"))
    28. print("result =", result)
    29. # 5.关闭浏览器
    30. sleep(2)
    31. driver.quit()
    32. """
    33. 输出结果:
    34. result = True
    35. """

    (2)presence_of_element_located(locator)示例(常用)
    这两个方法比较常用:

    • presence_of_element_located(locator): 单个元素定位
    • presence_of_all_elements_located(locator):定位一组元素,复数形式

    presence_of_element_located(locator)为例:

    1. """
    2. 1.学习目标:
    3. 必须掌握EC模块中元素定位方法presence_of_element_located(locator)
    4. 2.语法
    5. 2.1 presence_of_element_located(locator) 单个元素定位
    6. 2.2 presence_of_all_elements_located(locator) 定位一组元素,复数形式
    7. 其实是将find_element()方法做二次封装
    8. find_element_by_id("id属性值")
    9. 2.3 locator--定位器是一个数据类型元组
    10. ("元素定位方式","方式对应的值")
    11. ("id","id属性值")
    12. ("class name","class属性值")
    13. ("xpath","xpath表达式")
    14. ("partial link text","连接部分文本")
    15. ("name","name属性值")
    16. 具体可以看selenium.webdriver.common.by.By这个类
    17. 第一个参数可写形式
    18. By.ID = "id",也就是(By.ID ,"id属性值")
    19. By.XPATH = "xpath", (By.XPATH,"xpath表达式")
    20. 2.3 总结:
    21. EC模块中的方法一般和显示等待配合使用
    22. EC模块使用步骤:
    23. 1.编写定位器locator
    24. 2.配合webdriverWait一起使用
    25. 3.需求
    26. 使用EC模块中元素定位方法presence_of_element_located(locator)
    27. 定位百度首页搜索框
    28. """
    29. # 1.导入selenium
    30. from selenium import webdriver
    31. from time import sleep
    32. from selenium.webdriver.support import expected_conditions as EC
    33. from selenium.webdriver.support.wait import WebDriverWait
    34. # 2.打开Chrome浏览器
    35. driver = webdriver.Chrome()
    36. # 3.打开页面
    37. url = "https://www.baidu.com"
    38. driver.get(url)
    39. sleep(3)
    40. # 4.EC模块的使用
    41. # 4.1 定位单个元素
    42. # 4.1.1 编写locator(定位器)
    43. # 定位百度首页输入框
    44. input_locator = ("id", "kw")
    45. # 定位百度首页"百度一下"
    46. button_loator = ("id", "su")
    47. # 4.1.2 定位元素
    48. # 结合显式等待和EC模块实现元素定位
    49. bd_input = WebDriverWait(driver, 5).until(EC.presence_of_element_located(input_locator))
    50. bd_button = WebDriverWait(driver, 5).until(EC.presence_of_element_located(button_loator))
    51. # 5.操作元素
    52. bd_input.send_keys("【心善渊&Selenium3.0基础】")
    53. sleep(2)
    54. bd_button.click()
    55. # 6.关闭浏览器
    56. sleep(5)
    57. driver.quit()

    (3)text_to_be_present_in_element(locator,text)示例
    巩固练习:

    1. """
    2. 1.学习目标:
    3. 必须掌握EC模块中元素定位方法
    4. text_to_be_present_in_element(locator,text)
    5. 2.语法
    6. 2.1 text_to_be_present_in_element(locator,text)
    7. 判断文本是否在元素中,如果存在返回true,如果不存在返回false
    8. 2.2 text_to_be_present_in_element_value(locator,text)
    9. 判断文本是否存在于元素的value属性值中,如果存在返回true,如果不存在返回false
    10. """
    11. # 1.导入selenium
    12. from selenium import webdriver
    13. from time import sleep
    14. from selenium.webdriver.support import expected_conditions as EC
    15. from selenium.webdriver.support.wait import WebDriverWait
    16. # 2.打开谷歌浏览器
    17. driver = webdriver.Chrome()
    18. # 3.输入网址
    19. url = "https://www.baidu.com"
    20. driver.get(url)
    21. sleep(2)
    22. # 4.EC模块的使用
    23. # 4.1 判断text是否存在于文本中
    24. # 4.1.1 编写定位器locator
    25. link_loc = ("link text", "hao123")
    26. # 4.1.2 定义期望值
    27. text_link = "hao123"
    28. # 4.1.3 判断文本是否在元素中,如果存在返回true,如果不存在返回false
    29. result = WebDriverWait(driver, 5).until(EC.text_to_be_present_in_element(link_loc, text_link))
    30. print("present_in_element判定结果:", result)
    31. # 4.2 判断text是否存在于元素的value属性中
    32. # 判断百度首页的"百度一下"
    33. # 4.2.1 编写定位器locator
    34. button_loc = ("id", "su")
    35. # 4.2.2 定义期望值
    36. text_button = "百度一下"
    37. # 4.2.3 判断文本是否存在于元素的value属性值中,如果存在返回true,如果不存在返回false
    38. result_val = WebDriverWait(driver, 5).until(EC.text_to_be_present_in_element_value(button_loc, text_button))
    39. print("present_in_element_value判定结果:", result_val)
    40. # 5.关闭浏览器
    41. sleep(2)
    42. driver.quit()
    43. """
    44. 输出结果:
    45. present_in_element判定结果: True
    46. present_in_element_value判定结果: True
    47. """

    (4)注意:(重要)
    上面所有的练习,都必须正确找到需求的定位元素,否则会抛TimeoutException异常。
    因为WebDriverWait类和until()方法和EC模块这种组合的使用方法

    WebDriverWait(driver, 5).until(EC.presence_of_element_located(input_locator))

    如果没有定位到元素,会返回until()方法的返回结果,until()方法的返回结果是,在规定时间内没有找到需要定位的元素,就会抛出selenium.common.exceptions.TimeoutException: Message:异常。
    所以我们上边写的例子就是让自己熟悉WebDriverWait类和until()方法和EC模块这组合的用法,以后我们会进行异常处理和封装,让我们的代码更加可读,可复用。

    最后我这里给你们分享一下我所积累和真理的文档和学习资料有需要是领取就可以了

    1、学习思路和方法

    这个大纲涵盖了目前市面上企业百分之99的技术,这个大纲很详细的写了你该学习什么内容,企业会用到什么内容。总共十个专题足够你学习

    2、想学习却无从下手,该如何学习?

    这里我准备了对应上面的每个知识点的学习资料、可以自学神器,已经项目练手。

    3、软件测试/自动化测试【全家桶装】学习中的工具、安装包、插件....

    4、有了安装包和学习资料,没有项目实战怎么办,我这里都已经准备好了往下看

    最后送上一句话:
    世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。
    如果我的博客对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦

  • 相关阅读:
    postgres-operator 原理解析- 章节 I
    call、apply 以及 bind 的区别和用法
    openGauss学习笔记-100 openGauss 数据库管理-管理数据库安全-客户端接入之用SSL进行安全的TCP/IP连接
    Linux合集之Linux实用运维脚本分享及Linux CPU的上下文切换
    【Redis入门笔记 04】事务的基本操作
    CSS 纵横比属性:aspect-ratio
    Map和Set
    keep-alive缓存三级及三级以上路由
    插上u盘显示格式化怎么办?
    无涯教程-Android Online Test函数
  • 原文地址:https://blog.csdn.net/m0_59868866/article/details/127854193