• 首页
  • 产品与服务
  • 技术咨询
  • 新闻资讯
  • 合作伙伴
  • 关于我们
  • Python+selenium自动化之判定元素是否存在

    文章来源:未知 作者:admin 更新时间:2020-07-14

    在测试过程中,我碰到过这类的问题,使用find_element却找不到某个元素而产生异常,这就需要在操作某个元素之前判定该元素是否存在,而selenium中没有判定元素是否存在的方法,或者判定相同的元素有几个,需要操作对象是第几个。但是,有人已经总结一些相关的方式方法,下面还是通过实例说明。

    find_elements获取元素个数

    如果确定查找的元素在网页中只有一个,那么完全可以用find_element(),但如果有多个满足要求的节点,用find_element()就只能得到第一个节点了,所以查找多个节点时,应该使用find_elements()更好。即使元素只有唯一的一个时,由于网络时延或者弹窗前后台切换导致操作该元素时,该元素不存在,就可以使用find_elements来判定元素个数是否不为零,再进行相关操作。Selenium中find_elements的方法如下,但是注意复数形式,别乱用。

    Python+selenium自动化之判定元素是否存在

     

    Find_elements的方法很多,如果常用判定最好自己写一个函数,方便调用,通常选择CSS或xpath。返回0则页面没有这个元素,返回1则仅有1个元素,其它返回则说明有多个该元素。

    还是以企业邮箱为例,企业邮箱默认使用二维码方式登录,但是想要使用账户密码登录,就需要判定“账户密码登录”元素是否存在,我们可以使用 Ranorex Selocity直接复制该元素的xpath。

    Python+selenium自动化之判定元素是否存在

     

    Python+selenium自动化之判定元素是否存在

     

    但是这类有一个确定,就是当页面存在多个同样的元素时,也是返回true,可能需要操作的并不是第一个。

    捕获异常

    捕获异常是使用find_element方法无法获取元素则会抛出异常,如果找到元素则会返回True。

    Python+selenium自动化之判定元素是否存在

     

    # -*- coding: UTF-8 -*-from selenium import webdriver

    driver = webdriver.Firefox()

    driver.implicitly_wait(20)

    # 打开腾讯企业邮箱

    driver.get("https://exmail.qq.com/login")

    #判定元素是否存在def test_elements_judge(xpath):

    test_element = driver.find_elements_by_xpath(xpath)

    if len(test_element) == 1:

    return True

    else:

    return False

    #捕获异常

    def test_exceptions(xpath):

    try:

    driver.find_element_by_xpath(xpath)

    return True

    except:

    return False

    if test_exceptions("//form[@id='loginForm']"

    "/div[3]/div[@class='login_scan_footer']/a[1]"):

    driver.find_element_by_xpath("//form[@id='loginForm']" "/div[3]/div[@class='"

    "login_scan_footer']/a[1]").click()

    上一篇:Python+selenium自动化之等待

    下一篇:Python+selenium自动化之元素属性获取

    Copyright © 2016-2017 ZhiQueTech. All Rights Reserved

    地址:山东省·济南市·长清大学科技园·青年城3号楼十层

    鲁ICP备16036139号