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

liftword4个月前 (01-22)技术文章31

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

find_elements获取元素个数

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


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

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


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


捕获异常

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


# -*- 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 判断变量是否是 None 的三种写法

代码中经常会有变量是否为None的判断,有三种主要的写法:第一种是 if x is None ;第二种是 if not x: ;第三种是 if not x is None (这句这样理解更清晰 if...

python编程实践:如何将变量正确设置为空?

在Python中,变量是非常重要的一部分。它们用于储存数据,来支持程序的运行。当我们在编程时,将来可能会遇到一个问题:如何将变量正确设置为空?什么是变量?在Python中,变量是程序员用来储存数据的一...

python 基础(四)(python基础总结)

# -- coding: utf-8 -- # @Time : 2022/8/23 15:09 # @Author : siyu.yang # @desc : 第四章 模块,包,文件,日期、时间 #...

测开不得不会的python条件判断语句if

学习目录1. 条件语句结构2. 布尔值的判断3. not 表达式表示相反逻辑4. == 和is判断的区别5. 三元表达式(三元运算)6. 使用all() 和any()函数进行条件判断7. 使用and...

Python range():表示某个范围内的数值

range函数作用Python 中的range是表示整数区间的对象,通常用for循环访问。range函数t转的对象可以转换为列表for i in range(5)是一个循环,它遍历从 0 到 4(包括...

django rest框架之Django-ninja(django框架mvt)

django web框架,它是一个入门有门槛,学会了做项目非常方便的Web框架。《2020 Python 开发者调查结果》https://www.jetbrains.com/zh-cn/lp/pyth...