一。selenium的八大元素定位方法

1.id:

通过id查找

find_element_by_id
find_elements_by_id
2.name

通过name查找

find_element_by_name
find_elements_by_name
3.class_name

通过class_name查找

find_element_by_class_name
find_elements_by_class_name

注意:

class_name 查询的时候,classname 不能有空格

4.tag_name

通过tag_name标签查找

find_element_by_tag_name
find_elements_by_tag_name
5.link_text

通过超链接的文本查找(精确查询)

find_element_by_link_text
6.partial_link_text

通过超链接的文本一部分查找(也就是模糊查询)

find_element_by_partial_link_text
7.xpath

通过单属性或者组合多个特征查询

8.css_selector

通过css表达式查询

二。

1.find_element 和find_elements 的区别:

返回:

find_element:只能返回一个WebElent对象

find_elements:如果存在多个对象,以列表的形式返回

查找结果:

find_element:查找不到元素直接报错(NoSuchElementException)

find_elements:查找不到元素直接返回空列表

2.八大定位元素比较:

1)其实只有四种元素定义方法:

id、name、class_name、tag_name都是使用find_elements方法,源码上看都是一种方法

 

三。元素定位xpath详解:

官方学习链接:https://www.w3school.com.cn/xpath/index.asp

1)xpath定义:

XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。

XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。

因此,对 XPath 的理解是很多高级 XML 应用的基础。

2)语法:

 

 3)实例:

以百度网页为例

1.单个条件查询

//*[@id="kw"]

-//:代表相对路径

-*:代表所有标签

-@:属性

查询结果:

 

2.组合多个条件查询

//*[@id="kw" and @class="s_ipt"]

-and:组合多个查询时需要添加

运行结果:

 

3.通过父与子的关系进行查找:

//*[@id="s_kw_wrap"]/*[@name="wd"]

-/

运行结果:

 

4.通过子元素查找父元素

1) //*[@name="wd"]/..

-/..

运行结果:

 

2)轴运算、轴定位

表达式://input[@id="kw"]//preceding-sibling::span   --找到//input[@id="kw"]上级位置(同级内比他靠前)的标签名为‘span’的位置

常用:

- 哥哥、姐姐(同级内靠前):preceding-sibling
- 弟弟、妹妹(同级内靠前):following-sibling
- 祖先(当前位置的根位置):ancestor

 

运行结果:

 

 

 5.特殊查询:

1)查询第一个input标签

(//input)[1]

-html中标签位置是从第一开始算的

-():先计算括号里面的

运行结果:

 

2)函数查询

contains:包含

//*[contains(text(),"按图片")]

-更多的函数用法参考官网文档

运行结果:

 

四。css选择器

1.class_name查找

表达式:

.class_name

例子:

.s_ipt

运行结果:

 

2.id查找

#id

例子:

#kw

运行结果:

 

 3.灵活使用:

1与2中找到很多结果,需要精确查找

1.input.s_ipt

运行结果:

 

2.input#kw

运行结果:

 

 五。xpath与css之间的比较:

1.css比较xpath的优势:

1).表达方式更加简洁

2)在主流浏览器中css查询更快(以毫秒级的,几乎没感觉)

2.xpath比较css的优势:

1)xpath功能更加强大,有更多的函数(可以查找父级元素,可以使用轴定位查找元素)

2)xpath支持text文本操作,css不支持

3)对于复杂元素,xpath写法比较简洁(组合查询...)