Selenium2+python自动化36-判断元素存在【转载】

摘要:
前言最近,许多合作伙伴询问如何判断元素是否存在。此方法在硒中不可用。你需要自己写。如果元素不存在,将为操作元素报告错误,或者如果有多个元素且它们不是唯一的,也将报告错误。本文介绍了两种确定元素存在的方法。

前言

最近有很多小伙伴在问如何判断一个元素是否存在,这个方法在selenium里面是没有的,需要自己写咯。

元素不存在的话,操作元素会报错,或者元素有多个,不唯一的时候也会报错。本篇介绍两种判断元素存在的方法。

一、find_elements方法判断

1.find_elements方法是查找页面上所有相同属性的方法,这个方法其实非常好用,能熟练掌握技巧的不多,小编这次就发挥它的功效

2.由于元素定位的方法很多,所以判断的时候定位方法不统一也比较麻烦,这里我选择css定位(有喜欢xpath的同学可以自己用xpath语法)

3.写一个函数判断,找到就返回Ture,没找到就返回False(或者不止一个)

Selenium2+python自动化36-判断元素存在【转载】第1张

二、百度输入框为例

1.判断id为kw的元素是否存在

2.判断标签为input元素是否存在

3.判断id为xxx元素是否存在

Selenium2+python自动化36-判断元素存在【转载】第2张

三、捕获异常方法

1.如果没找到元素会抛异常,返回False

2.如果找到元素就返回Ture

3.但是这个方法有个弊端,如果页面上存在多个一样元素,也会返回Ture的(也就是说只要页面上有元素就返回Ture,不管几个)

Selenium2+python自动化36-判断元素存在【转载】第3张

四、参考代码

# coding:utf-8
from selenium import webdriver

driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
def is_element_exist(css):
    s = driver.find_elements_by_css_selector(css_selector=css)
    if len(s) == 0:
        print "元素未找到:%s"%css
        return False
    elif len(s) == 1:
        return True
    else:
        print "找到%s个元素:%s"%(len(s),css)
        return False

# 判断页面上有无id为kw的元素
if is_element_exist("#kw"):
    driver.find_element_by_id("kw").send_keys("yoyoketang")
# 判断页面有无标签为input元素
if is_element_exist("input"):
    driver.find_element_by_tag_name("input").send_keys("yoyoketang")
# 判断页面有无id为xxx的元素
if is_element_exist("xxx"):
    driver.find_element_by_id("xxx").send_keys("yoyoketang")

def isElementExist(css):
    try:
        driver.find_element_by_css_selector(css)
        return True
    except:
        return False

print isElementExist("#xxx")

免责声明:文章转载自《Selenium2+python自动化36-判断元素存在【转载】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# 编译运行原理JS 的map和array集合组合返回JSON字符串下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CSS3去除手机浏览器button点击出现的高亮框

在工作中常常遇到在手机浏览器中浏览网页时。点击页面中的button或者是具备点击事件的元素,就会出现一个默认的高亮框。影响总体的感官体验。能够用一个简单的css3属性来解决:tap-highlight-color,最好加上webkit浏览器前缀。 -webkit-tap-highlight-color: rgba(0,0,0,0); -webkit-t...

css控制继承

inherit:继承父类。 initial:继承浏览器。 unset:重置为自然值,继承父类或者浏览器。 revert:恢复原来的值。 详解: CSS为处理继承提供了四种特殊的通用属性值: inherit: 该值将应用到选定元素的属性值设置为与其父元素一样。 initial :该值将应用到选定元素的属性值设置为与浏览器默认样式表中该元素设置的值一样。...

自定义浏览器滚动条样式

为了有助于理解IE中滚动条样式的控制,你可以查看如下的图片: 经过不断的测试发现,在Win8 下面,有一部分样式都起着相同的作用。估计是因为在Win8中扁平化的界面设计而重新定议了系统中滚动条!以下是Win 8下面的滚动条样式,并写出了和CSS支持的情况: 以上所写的几个四个CSS属性,足以控制Win 8系统下,IE浏览器的滚动条样式了。但经过测试...

CSS3之边框图片border-image

CSS3中有关border的属性,还有很多,今天我将为大家介绍一个很好玩的属性——Border-image。有了CSS3之边框图片Border-image,我们可以轻松搞定圆角,轻松搞定很多之前难搞的东东。 一、border-image的语法 1、border-image-source border-image-source:url(image);/*im...

JS以及CSS对页面的阻塞

一、JS阻塞    所有的浏览器在下载JS文件的时候,会阻塞页面上的其他活动,包括其他资源的下载以及页面内容的呈现等等,只有当JS下载、解析、执行完,才会进行后面的 操作。在现代的浏览器中CSS资源和图片image资源是并行下载的,在IE6中默认的并行的加载数目是2个,在IE6以后以及其他的浏览器中的默认的并行加载数目是6个。 在浏览器从服务器接收到HTM...

【转】CSS浏览器兼容性与解析问题终极归纳

1.怪异模式问题:漏写DTD声明,Firefox仍然会按照标准模式来解析网页,但在IE中会触发怪异模式。为避免怪异模式给我们带来不必要的麻烦,最好养成书写DTD声明的好习惯。 2.IE6双边距问题:在IE6下,如果对元素设置了浮动,同时又设置了margin-left或margin-right,margin值会加倍。例如: HTML: <div cla...