Selenium学习之路02-Webdriver API元素定位

2021-05-28 01:00

阅读:401

标签:实战   查找   截取   target   输入框   baidu   def   self   nbsp   

  大家对于我们在界面UI测试的时候流程非常熟悉吧,比如一个百度搜索,我们首先打开www.baidu.com的地址,然后肉眼找到搜索框,输入想要输入的关键字,然后在点击搜索按钮,就会返回我们想要搜索的结果列表。

  而对于自动化测试来说,最基本的就是”肉眼查找”,也就是定位元素。而自动化工具如何找到元素了?对此WebDriver提供了八种元素定位方法。分别可以通过ID,name,class,tag,link,partial link,XPath,CSS进行元素的定位,除此之外还有通过By来声明定位的方法。

以下为截选的输入框的一段HTML

input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

1.id定位

通过HTML元素的id来进行元素的查找,写法如下

find_element_by_id(“kw”)

2.name定位

通过HTML元素的name来进行元素的查找,写法如下

find_element_by_name(“wd”)

3.class定位

通过HTML元素的class来进行元素的查找,写法如下

find_element_by_class_name(“s_ipt”)

4.tag定位

通过HTML元素的class来进行元素的查找,写法如下

find_element_by_tag_name(“input”)

5.link定位

link即链接,专门用来定位文本链接,同前面几个方法有所区别,我们截取一段链接的HTML代码

a href="http://map.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">地图a>

用法如下:

find_element_by_link_text(“地图”)

6.partial link定位

partial link是对link的一种补充,比如有些文本非常长,而我们此时只需要截取文本的一段使用partial link来进行定位就可以节约工作量,用法如下

find_element_by_partial_link_text(“地”)

7.Xpath定位

Xpath是一种在XML文档中定位元素的定位语言。因为HTML可以看做是XML的一种实现,所以Selenium用户可以使用这种强大的语言在WEB应用中进行定位。由于内容较多,所以我会单独写一篇来描述Xpath的定位

8.CSS定位

CSS(英文全称:Cascading Style Sheets)是一种用来表现HTML或XML等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。

选择器

例子

描述

.class

.s_ipt

类选择器,选择所有class=”s_ipt”的元素

#id

#kw

Id选择器,选择所有id=”kw”的元素

*

*

所有元素

element

Input

元素所有的元素

element>element

span>input

选择父元素为的所有元素

element+element

span+input

选择同一级中紧接在元素之后的所有元素

[attribute=value]

[target=_blank]

选择target=”_blank的所有元素”

 

 

xml version="1.0"?>

span id="s_kw_wrap" class="bg s_ipt_wr quickdelete-wrap">

    span class="soutu-btn">span>

    input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

        a href="javascript:;" id="quickdelete" title="清空" class="quickdelete" style="top: 0px; right: 0px; display: none;">a>

        span class="soutu-hover-tip" style="display: none;">按图片搜索span>

    input>

span>

 

以上面HTML部分代码为例进行元素定位

a.通过class属性进行定位:

find_element_by_css_selector(“.s_ipt”)

 

b.通过id进行定位

find_element_by_css_selector(“.kw”)

 

c.通过标签名进行定位

find_element_by_css_selector(“input”)

 

d.通过父子关系进行定位

find_element_by_css_selector(“span>input”)

 

e.通过属性值进行定位

find_element_by_css_selector(“[autocomplete="off"]”)

 

 

9.用By定位元素

如果有看过以上定位API的源码会发现实际都是通过find_element()统一实现的,所以我们也可以通过By来声明定位的方法

具体如下

find_element(By.ID,”kw”)

find_element(By.NAME,”wd”)

find_element(By.CLASS_NAME,”s_ipt”)

find_element(By.TAG_NAME,”input”)

find_element(By.LINK_TEXT,”新闻”)

find_element(By.PARTIAL_LINK_TEXT,”新”)

find_element(By.XPATH,”//*[@class=”s_ipt”]”)

find_element(By.CSS_SELECTOR,”.s_ipt”)

 

 

在此摘抄下find_element_by_id的源码

    def find_element_by_id(self, id_):
        """Finds an element by id.

        :Args:
         - id\_ - The id of the element to be found.

        :Returns:
         - WebElement - the element if it was found

        :Raises:
         - NoSuchElementException - if the element wasn‘t found

        :Usage:
            element = driver.find_element_by_id(‘foo‘)
        """
        return self.find_element(by=By.ID, value=id_)

参考书籍:

Selenium 2自动化测试实战 基于Python语言 ,虫师编著

 

Selenium学习之路02-Webdriver API元素定位

标签:实战   查找   截取   target   输入框   baidu   def   self   nbsp   

原文地址:https://www.cnblogs.com/sgcm/p/14781478.html


评论


亲,登录后才可以留言!