zoukankan      html  css  js  c++  java
  • Selenium自动化

    在显式等待WebDriverWait的until和until_not方法中我们经常要用到,它会根据网页标题、网址以及元素是否可见等条件来决定我们是否需要继续等待。我查看了一下源码,根据各大类型对它们做了个整理,方便记忆。

    因为要使用 expected_conditions模块中的类,所以第一步肯定是要引入该模块,考虑到引用类时,很多地方都用到了locator定位范围,所以这里我们还要引入必须要引入 selenium.webdriver.common.by 的 By 模块,具体代码如下:

    # 定位用
    from selenium.webdriver.common.by import By
    # 显示等待
    from selenium.webdriver.support.ui import WebDriverWait
    # until和until_not方法
    from selenium.webdriver.support import expected_conditions as EC

    接下来就是相关类的介绍以及简单使用示例:

    1、title标题

    (1)title_is 网页标题是否显示特定内容(必须完全符合),如果是返回True,否则返回False
    # title标题
    # title_is:网页标题是否显示特定内容(必须完全符合)
    # title_contains:网页标题是否包含特定内容
    title = WebDriverWait(driver, 5).until(EC.title_is('表单综合实例'))
    print(f'title标题:真是True, 假是False. 结果:{title}')

    (2)title_contains 网页标题是否包含特定内容,如果是返回True,否则返回False

    result = EC.title_contains('百度')
    print(result(self.driver))

    2、url网址

    (1)url_to_be 网页网址是否显示特定网址(必须完全符合),如果是返回True,否则返回False

    # url网址
    # url_contains:网页网址是否包含特定内容
    # url_matches:网页网址是否匹配特定内容
    url = WebDriverWait(driver, 5).until(EC.url_to_be('file:///D:/WebPage/page.html'))
    print(f'url网址:真是True, 假是False. 结果:{url}')

    (2)url_contains 网页网址是否包含特定内容,如果是返回True,否则返回False

    # url网址
    # url_contains:网页网址是否包含特定内容
    # url_matches:网页网址是否匹配特定内容
    url = WebDriverWait(driver, 5).until(EC.url_matches('file:///D:/WebPage/page.html'))
    print(f'url网址:真是True, 假是False. 结果:{url}')

    (3)url_matches 网页网址是否匹配特定内容,如果是返回True,否则返回False

    #url是https://www.baidu.com/
    pattern = r'/(w+)://([^/:]+)(:d*)?([^# ]*)/' #使用正则表达式,规定网址格式(格式要求以https开头)
    result = EC.url_contains(pattern)
    print(result(self.driver))

    (4)url_changes 网页是否更改了,如果是返回True,否则返回False

    3、element元素显示与可见
    (1)presence_of_element_located 特定元素是否存在于页面DOM树中(存在非可见),如果是,返回该元素(单个元素),否则报错

    # 存在非可见
    # presence_of_element_located()
    # 检查元素是否出现在页面的DOM上的期望。 这并不一定意味着元素是可见的。
    locator = (By.XPATH, '//input[@id="alert"]')
    ele = WebDriverWait(driver, 3).until(EC.presence_of_element_located(locator))

    (2)presence_of_all_elements_located 定位的元素范围内,是否至少有一个元素存在于页面当中,如果是,返回满足条件的所有元素组成的List,否则返回空List

    # 检查网页上是否至少存在一个元素的期望, 一旦找到, 以列表的形式返回
    # presence_of_all_elements_located()
    locator = (By.XPATH, '//input[@id="alert"]')
    ele = WebDriverWait(driver, 3).until(EC.presence_of_all_elements_located(locator))

    (3)visibility_of_element_located 特定元素是否存在于DOM树中并可见(存在及可见),如果是返回该元素(单个元素),否则报错

    # 存在且可见
    # visibility_of_element_located ()
    # 期望检查某个元素是否出现在页面的DOM中且可见。可见性意味着元素不仅被显示,而且其高度和宽度都大于0。
    locator = (By.XPATH, '//input[@id="alert"]')
    ele = WebDriverWait(driver, 3).until(EC.visibility_of_element_located(locator))
    ele.click()

      注:visibility_of_element_located 与 presence_of_element_located作用类似,但前者无所谓可见与否,所以在性能上略胜一筹。

    (4)invisibility_of_element_located 特定元素是否不可访问或不存在于DOM树中,如果不存在则返回True,否则返回True

      注:invisibility_of_element_located 刚好与 visibility_of_element_located的作用相反,且返回的结果大不相同。

    (5)invisibility_of_element 特定元素是否不可访问或不存在于DOM树中,如果不存在则返回True,否则返回True

      注:invisibility_of_element_located 与 invisibility_of_element 作用类似,但前者传的是定位范围locator,后者可以是定位范围(仅text文本),也可以是元素element。

    (6)visibility_of 特定元素是否存在于DOM树中并可见,如果是返回该元素(单个元素),否则报错

    element = self.driver.find_element_by_id('kw')
    result = EC.visibility_of(element)
    print(result(self.driver))

      注:visibility_of_element_located 与 visibility_of 作用类似,但是前者传入的是定位范围locator,后者传入的是元素element,另外 invisibility_of_element 与 visibility_of 作用相反,且返回的结果大不相同。

    (7)visibility_of_any_elements_located 定位的元素范围内,是否至少有一个元素存在于DOM树中并可见,如果是,返回满足条件的所有元素组成的List,否则返回空List

    (8)visibility_of_all_elements_located 定位的元素范围内,是否所有元素都存在于DOM树中并且可见,如果是,以List形式返回元素,否则返回False

    (9)element_to_be_clickable 特定元素是否可点击,如果可以则返回该元素,否则返回False

    locator = (By.ID, 'su') #<su>是一个可点击的按钮
    result= EC.element_to_be_clickable(locator)
    print(result(self.driver))

    (10)staleness_of 特定元素是否不再附加于于DOM树中,如果不再附加返回True,否则返回False

    4、text文本

    (1)text_to_be_present_in_element 特定文本是否出现在特定元素中,如果是则返回True,否则返回False

    # text文本 title (判断文本对不对)
    # text_to_be_present_in_element:特定文本是否出现在特定元素中
    # text_to_be_present_in_element_value:判断某文本是否是存在于特定元素的value值中
     locator = (By.XPATH, '//button[@value="注册"]')
    ele = WebDriverWait(driver, 10).until(EC.text_to_be_present_in_element(locator, '注册'))
    print(f'text文本:真是True, 假是False. 结果:{ele}')

    (2)text_to_be_present_in_element_value 判断某文本是否是存在于特定元素的value值中,如果是则返回True,否则返回False

    locator = (By.ID, 'su')
    element = EC.text_to_be_present_in_element_value(locator, '百度一下') #查看<su>的value值中是否包含'百度一下'
    print(element(driver))

      注:如果该特定元素没有value值,也会返回False

    5、frame
    (1)frame_to_be_available_and_switch_to_it frame窗口是否可被切换,如果是返回True,否则返回False

    # frame切换

    # frame_to_be_available_and_switch_to_it:frame窗口是否可被切换,如果可用,它将给定的驱动程序切换到指定的帧。 ele = (By.XPATH, '//iframe[@id="idframe1"]') frame = WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(ele)) print(f'frame切换:真是返回alert对象, 假是False. 结果:{frame}')

    6、Select
    (1)element_to_be_selected 特定元素是否被选中,如果是,返回True,否则返回False

    element= self.driver.find_element_by_id('select1')
    result = EC.element_to_be_selected(locator)
    print(result(self.driver))

    (2)element_located_to_be_selected

    locator = (By.ID, 'checkbox1')
    result = EC.element_located_to_be_selected(locator)
    print(result(self.driver))

    (3)element_selection_state_to_be 特定元素的选中状态是否与预期相同,相同则返回True,不同则返回False

    checkbox = self.driver.find_element_by_id('checkbox1')
    result = EC.element_selection_state_to_be(checkbox, True) #第二个参数可设置为True或False
    print(result(self.driver))

    (4)element_located_selection_state_to_be 特定元素的选中状态是否与预期相同,相同则返回True,不同则返回False

    locator = (By.ID, ‘checkbox1’)
    result = EC.element_located_selection_state_to_be(locator, True) #第二个参数可设置为True或False
    print(result(self.driver))

      注:element_selection_state_to_be 与 element_located_selection_state_to_be 作用类似,只是传递的参数一个是元素element,一个是作用范围locator。

    7、windows窗口

    (1)number_of_windows_to_be 特定窗口数和实际窗口数是否一致,如果是返回True,否则返回False

    # windows窗口(1)
    # (1)number_of_windows_to_be   特定窗口数和实际窗口数是否一致,如果是返回True,否则返回False
    #   填入int类型数据
    windows = WebDriverWait(driver, 3).until(EC.number_of_windows_to_be(1))  # 期望窗口设置为1个
    print(f'窗口数:真是True, 假是False. 结果:{windows}')

    (2)new_window_is_opened 新窗口是否打开,如果是返回True,否则返回False

    # windows窗口(2)  期望打开一个新窗口并增加窗口句柄的数量
    # (2)new_window_is_opened  新窗口是否打开,如果是返回True,否则返回False
    #   1、先获取所有窗口句柄,2、操作打开新窗口,3、使用new_window_is_opened判断是否打开一个新窗口
    current_handles = driver.window_handles  # 获得当前所有句柄数量
    new_window = WebDriverWait(driver, 3).until(EC.new_window_is_opened(current_handles))
    print(f'打开一个新窗口:真是True, 假是False. 结果:{new_window}')

    8、alert对话框

    (1)alert_is_present 弹出框是否存在,如果是,切换到alert,否则返回false

    # alert对话框
    # (1)alert_is_present   弹出框是否存在,如果是真返回alert对象,否则返回false
    alert = WebDriverWait(driver, 3).until(EC.alert_is_present())
    print(f'alert对话框:真是返回alert对象, 假是False. 结果:{alert}')
  • 相关阅读:
    javascript学习笔记(一):基础、输出、注释、引用、变量、数据类型
    black-hole《XSS的原理分析与解剖》阅读笔记
    《xss跨站脚本剖析与防御》实验笔记
    XSS和CSRF的区别
    前端常用插件、工具类库汇总(下)
    前端常用插件、工具类库汇总(上)
    前端特效【第03期】|果汁混合效果-上
    玩转 React 【第03期】:邂逅 React 组件
    前端修炼の道 | 如何成为一名合格前端开发工程师?
    前端特效【第02期】|多功能提交按钮
  • 原文地址:https://www.cnblogs.com/yongzhuang/p/15028052.html
Copyright © 2011-2022 走看看