Selenium + Python 自动化测试03(元素定位)

        上一篇我们讲述了第一个测试用例脚本的编写。我们对web自动化测试有了一个初步的认识。接着我们详细讲述元素定位方法。

        Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素才能进行后续的自动化控制,定位元素方法总结归纳一下:8种基本元素定位方式:保证定位到唯一性是目的,这样在执行中才不会出错。

1、8种定位方法:

1)id 定位

2)name 定位

3)class 定位

4)link_text 定位

5)partial_link_text 定位

6)CSS 定位

7)Xpath 定位

8)tag_name 定位

2、如何查看元素

      这里以Chrome 浏览器来讲述。

1)先打开要定位元素的网页

2)F12查看到元素结构

如下图,展示本页面所有的元素

3)找到对应控件元素

每个元素都有不同的标签名和属性值。点击输入框-右击-查看

4)查看对应元素的描述

对应下图就展示对应元素的层级位置,以及元素的属性

我们把输入框的元素复制出来,就是有id,name,class 和对应属性值。希望详细了解的可以参考前端HTML的基础知识。

<input class="input_error form_input" placeholder="Username" type="text" data-test="username" id="user-name" name="user-name" autocorrect="off" autocapitalize="none" value="">

3、定位方法实践

        3.1、id定位

以下图输入框为例,对应的元素id的名字是:id="user-name"

#输入用户名
        
 driver.find_element_by_id("user-name").send_keys(username) # by id 定位

3.2、name 定位

和id的类似,就不赘述

对应的元素name的名字是:name="user-name"

driver.find_element_by_id("user-name").send_keys(username) # by id 定位

3.3、class 定位

和id的类似,就不赘述

对应的元素name的名字是:class="input_error form_input"

driver.find_element_by_class_name("input_error form_input").send_keys(username)   # by class 定位

3.4、link_text 定位

link_text 是以超链接全部名字作为关键字来定位元素的。以百度首页“新闻”超链接为例,如下图 1.所示,关键字为“新闻”。

<a href="http://news.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">新闻</a>

对应元素的target:新闻

#定位link_text
driver.find_element_by_link_text("新闻").click() #通过link_text

3.5、partial_link_text 定位

是link_text 定位的一种补充,有些文本链接比较长,这个时候我们可以取其中一部分进行定位。

如类似上面的例子:上面百度的新闻使用“新”定位

driver.find_element_by_partial_link_text("新").click() #通过partial_link_text定位

3.6、CSS 定位

CSS :cascading style sheets 是一种语言,它用来描述HTML 、XML文档的表现。CSS通过选择器为页面元素绑定属性。

  1)通过class属性定位:点号(".")表示通过class属性定位

元素:  <input class="u-btn mart5" type="submit" οnclick="return User.check()" value="登录">
定位写法:driver.find_element_by_css_selector(".u-btn.mart5").click()

  2)通过id属性定位:("#")表示通过id定位元素

driver.find_element_by_css_selector("#loginName")

  3)通过其他属性定位:("[]"),中括号里的属性可以唯一标识这个元素就可以;属性的值可以加引号,也可以不加

元素: <input class="u-btn mart5" type="submit" οnclick="return User.check()" value="登录">
写法: driver.find_element_by_css_selector("[type=submit]").click()

  4)组合定位

       平时使用生成的xpath,id,name,classname这些比较多,我们当然可以把上面的定位策略组合起来使用,这就大大加强了定位元素的唯一性。如下:

driver.find_element_by_css_selector("form.fm>span>input.s_ipt")

3.7Xpath 定位

1)特点:

通过 XPath 来定位元素的方式,对比较难以定位的元素来说很有效,几乎都可以解决,特别是对于有些元素没有 id、name 等属性的情况。

XPath 是 XML Path 语言的缩写,是一种用来确定 XML 文档中某部分位置的语言。它在 XML 文档中通过元素名和属性进行搜索,主要用途是在 XML 文档中寻找节点。XPath定位比 CSS 定位有更大的灵活性。XPath 可以向前搜索也可以向后搜索,而 CSS 定位只能向前搜索,但是 XPath 定位的速度比 CSS 慢一些。

XPath 语言包含根节点、元素、属性、文本、处理指令、命名空间等。

2)定位策略-绝对路径

通过写出元素的绝对路径来定位:

绝对路径可以通过下面的方法copy出来,是不是很方便!

选中元素-右击-copy-copy Xpath:

也可以手写,就是按层级结构写下来。

对照层级写绝对地址:driver.find_element_by_xpath("/html/body/div/div/div[2]/div/div/div/div/input")

3)定位策略-相对地址

//表示相对的位置,再加一些限定的属性值来定位到元素:页面相对复杂度高的时候这个就比较有用。

如下通过相对位置的id值://*[@id='user-name'] 

driver.find_element_by_xpath("//*[@id='user-name']").send_keys(username)  #通过xpath定位

3.8、tag_name 定位

HTML 的本质就是通过tag 来实现不同功能,每一个元素本质上也是一个tag。因为一个tag往往用来定义一类功能,所以通过tag唯一识别某个元素的概率比较低。用的相对比较少。

如下图:定位标签“form”并打印标签属性值“name”。

str=driver.find_element_by_tag_name("form").get_attribute("name") #获取form名字
print(str)

两外,现在有另一种写法。用By定位元素

  除find_element_by_***这种方式,还有另一套写法,也就是统一调用find_element()方法,两个参数,第一个参数是定位的类型,由By提供;第二个参数是定位的具体值。例子如下:

from selenium.webdriver.common.by import By     #使用By这种定位前要将By类导入

find_element(By.ID,"loginName")
find_element(By.NAME,"SubjectName")
find_element(By.CLASS_NAME,"u-btn-levred")
find_element(By.TAG_NAME,"input")
find_element(By.LINK_TEXT,"退出")
find_element(By.PARTIAL_LINK_TEXT,"退")
find_element(By.XPATH,".//*[@id='Title")
find_element(By.CSS_SELECTOR,"[type=submit]")

以上就是我这边了解的定位元素的方法了,麻烦各位大佬不吝赐教。谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立黄昏粥可温

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值