Selenium之学习杂记(二)

元素定位

在计算机领域中,页面的最基本组成单元为元素。要确定一个元素,我们需要特定的信息来说明这个元素的唯一特征。
Selenium的8种元素定位方式

元素定位概述

Selenium提供了如下8种定位方式。

定位名称在Python的selenium对应的方法
●根据ID定位find_element_by_id()
●根据name定位find_element_by_name()
●根据XPath定位find_element_by_xpath()
●根据标签名定位find_element_by_tag_name()
●根据类名定位find_element_by_class_name()
●根据CSS选择器定位find_element_by_css_selector()
●根据链接文本定位find_element_by_link_text()
●根据部分链接文本定位find_element_by_partial_link_text()

在定位元素的过程中,我们也会遇到很多困难,比如,前端设计师常常会使用很多方式来隐藏网页中的元素。常见的隐藏方式有以下几种。
●将opacity设置为0。
●将visibility设置为hidden。
●将display设置为none。
●将position设置为absolute,然后将其位置设置到不可见区域。

通常,这些方式是为防止网络爬虫而设置的。假设网站上一个position被设置为absolute并且位于真实用户不可见区域的表单上,那么当你提交了这个表单后,网站就有足够的证据判断你并不是真正的用户,紧接着服务器就会拒绝你的访问请求。

根据ID定位

HTML属性中的ID是很重要的,这些ID就相当于一个人的身份证。具有特定ID值的HTML元素可以被CSS(Cascading Style Sheet,层叠样式表)选择器和JavaScript脚本查找到,并执行某种特定的功能。为了便于区分,在HTML页面中,我们一般不会设置ID相同的HTML元素,否则会有相当严重的后果。
在这里插入图片描述
重点在这里,id=“kw”,从这里可以知道,百度页面中搜索框的ID为kw。再来看一下“百度一下”按钮的代码,如下。
在这里插入图片描述
通过上面这段代码我们可以看到,id=“su”。接下来,我们根据获得的两个ID编写一个自动化程序,代码如下。
在这里插入图片描述
send_key()是一个方法,用于向搜索框发送特定的字符串。使用它时请不要忘记在特定字符串的前后加上双引号
click()同样也是一个方法,用于向某个特定的HTML元素发送确认请求

根据 name定位

元素的ID和name的区别在哪里?为什么有了ID还需要name呢?ID就像是一个人的身份证号码,而name就像是他的名字。ID的值显然是唯一的,而name的值是可以重复的。
在这里插入图片描述
在这里插入图片描述

根据XPath定位

XPath的写法是多种多样的,即便使用不同的方式书写,用户也可以查找到相同的元素。比如,要定位百度的搜索框,可以用下面7种写法。
●//[@id=‘kw’]。
●//
[@name=‘wd’]。
●//input[@class=‘s_ipt’]。
●/html/body/form/span/input。
●//span[@class=‘soutu-btn’]/input。
●//form[@id=‘form’]/span/input。
●//input[@id=‘kw’ and @name=‘wd’]。
在这里插入图片描述
我们可以使用r’****’(***为任意字符,r表示raw string,原始字符串常量)来转义,同时使用单引号以便与XPath的双引号区分开,避免混淆。

根据标签名定位

在这里插入图片描述
这种定位方法堪称最不靠谱的定位方法,因为在一个HTML页面中可能会有很多相同的标签。比如,我们常见的百度页面其实并不是只有一个搜索框(它还有很多隐藏的搜索框,这些搜索框各有各的作用,虽然它们采用了input标签,但是它们并不是用来搜索的),只是其他搜索框的属性被设置为隐藏,在自动化测试实践中,我们用到这种方式的机会并不多,很多时候,我们都会采用其他几种方式。
## 根据类名定位
作为HTML标签的属性,class规定元素的类名,绝大多数的class标签都指向CSS中的类。我们可以同时给一个HTML标签附上多个类,比如,通过,同时将left_menu和important赋给span标签(中间的空格叫作间隔符号,表示一个标签同时被class修饰)。因为Selenium现在的版本已经不再支持复合类名(本来规定传入的参数是一个类名,而这里传入的是一个复合的类名),所以对于class="btn self-btn bgs_btn"这样的复合类名,是无法通过使用类名来定位元素的。那怎么解决呢?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

根据CSS选择器定位

在CSS中,选择器是一种模式,用于指定特定元素样式的模式。类似于根据XPath定位,根据CSS选择器也有很多种定位元素的方式。以下均为根据CSS选择器定位百度搜索框的方式。
●"#kw"。
●"html > body > form > span > input"。
●"form#form > span > input"。
●"span.soutu-btn> input#kw"。
●".s_ipt"。
●"[name=wd]"。
●[name=wd],选择所有name属性为wd的元素(虽然这个页面只有一个)。●#kw,选择ID为kw的元素(ID是唯一的,只能选择一个)。●a[src^=“http”],选择所有以http作为src开头的元素。
●"html > body > form > span > input",从标签html中选出标签body,依次类推,直到选出input标签。
●".s_ipt",表示选择所有class属性为s_ipt的标签,注意不要忽略了标签前面的点,前面的点才是关键的。
●"span.soutu-btn> input#kw"的这种写法是复合写法,首先查找到class属性中含有soutu-btn的span标签,然后从span标签的子元素中查找ID为kw的input标签。

根据链接文本定位

根据ID和类名定位这两种方法最方便,而下面介绍的这种定位方法最实用。我们换一个目标,不再是搜索框和“百度一下”按钮,而是转到右上角的链接。
在这里插入图片描述

根据部分链接文本定位

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值