• Selenium(二十):expected_conditions判断页面元素


    1. 判断元素(expected_conditons)

    作为一个刚刚转到python开发的小朋友,在开发前只将前辈们封装的方法看了一遍,学了一边selenium基础。看到封装的方法有什么判断元素是否存在、判断元素是否可见,而在基础知识中根本不存在,一脸懵逼。

    直到写爬虫案例的时候,突然发现了selenium下的一个模块吸引了我,因为我在其他开发中根本没有碰到这个模块,所以我就去了解了一下,然后就有了这篇博客。

    selenium的expected_conditions模块一般也简称EC,收集了一系列的场景判断方法。

    expected_condtions提供了16种判断页面元素的方法。

    我们就用百度首页来进行演示吧(想不到什么网页)。

    前面代码都一样,所以我就写在前面了。

    #coding=utf-8
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.wait import WebDriverWait
    
    base_url = "http://www.baidu.com"
    driver = webdriver.Firefox()
    driver.implicitly_wait(5)
    # 隐式等待和显示等待都存在时,超时时间取二者中较大的
    driver.get(base_url)

    title_is():判断当前页面的title是否完全等于预期字符串,返回布尔值

    demo = WebDriverWait(driver,10).until(EC.title_is(u"百度一下,你就知道"))
    print("判断title,返回布尔值:",demo)

    结果:

    title_contains():判断当前页面的title是否包含预期字符串,返回布尔值 

    demo = WebDriverWait(driver,10).until(EC.title_contains(u"百度一下"))
    print("判断title,返回布尔值:",demo)

    结果:

    presence_of_element_located():判断某个元素是否被加到dom树下,不代表该元素一定可见 

    demo = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw')))
    '''判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回WebElement'''
    print(demo)

    结果:

    visibility_of_element_located():判断某个元素是否可见,可见代表元素非隐藏,并且元素的宽和高都不为0 

    demo = WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,'su')))
    '''判断某个元素是否被添加到了dom里并且可见,可见代表元素可显示且宽和高都大于0'''
    print(demo)

    结果:

    visibility_of():判断元素是否可见,如果可见就返回这个元素 

    demo = WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(by=By.ID,value='kw')))
    '''判断元素是否可见,如果可见就返回这个元素'''
    print(demo)

    结果:

    presence_of_all_elements_located():判断是否至少一个元素存在于dom树中,举个例子,如果页面上有n个元素的class都是'coumn-md-3',name只要有一个元素存在,这个方法就返回True 

    demo = WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.mnav')))
    '''判断是否至少有1个元素存在于dom树中,如果定位到就返回列表'''
    print(demo)

    结果:

    text_to_be_present_in_element_value():判断某个元素中的value属性值是否包含了预期字符串 

    demo = WebDriverWait(driver,10).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR,'#su'),u'百度一下'))
    '''判断指定元素的属性值中是否包含了预期的字符串,返回布尔值'''
    print(demo)

    结果:

    text_to_be_present_in_element():判断某个元素中的text文本是否包含预期字符串 

    demo = WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.XPATH,"//*[@id='u1']/a[8]"),u'设置'))
    '''判断指定的元素中是否包含了预期的字符串,返回布尔值'''
    print(demo)

    结果:

    frame_to_be_availabe_and_switch_to_it():判断该frame是否可以switch进去,如果可以,则返回True并且switch进去,否则返回False (没找到例子)

    invisibility_of_element_located():判断某个元素是否不存在于dom树或不可见

    demo = WebDriverWait(driver,10).until(EC.invisibility_of_element_located((By.CSS_SELECTOR,'#swfEveryCookieWrap')))
    '''判断某个元素在是否存在于dom或不可见,如果可见返回False,不可见返回这个元素'''
    #注意#swfEveryCookieWrap在此页面中是一个隐藏的元素
    print(demo)

    结果:

    element_to_be_clickable():判断某个元素是见并且是enable(有效)的,这样的话才叫clickable 

    demo = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='u1']/a[8]"))).click()
    '''判断某个元素中是否可见并且是enable的,代表可点击'''
    print(demo)

    结果:

    staleness_of():等某个元素从dom树下移除,返回True或False(没找到例子)

    element_to_be_selected:判断某个元素是否被选中,一般用于select下拉表(没找到例子)

    element_selection_state_to_be:判断某个元素的选中状态是否符合预期(没找到例子)

    element_located_selection_state_to_be:跟上面的方法一样,只是上面的方法传入定位到的element,这个方法传入locator(没找到例子)

    alert_is_present:判断页面上是会否存在alert(没找到例子)

  • 相关阅读:
    细说google,baidu引擎收录习惯
    考研机试 11.二叉树遍历
    考研机试 18.特殊乘法
    考研机试 19.今年的第几天
    考研机试 20.完数VS盈数
    考研机试 12.玛雅人的密码
    考研机试 10.球的半径和体积
    考研机试 17.n的阶乘
    考研机试 15.abc
    考研机试 9.成绩排序
  • 原文地址:https://www.cnblogs.com/liuhui0308/p/12080397.html
Copyright © 2020-2023  润新知