前言:

我们在做WEB自动化时,最根本的就是操作页面上的元素,首先我们要能找到这些元素,然后才能操作这些元素。工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素。那么我们怎么来定位他们呢?

在学习元素定位之前,我们最好能懂一点html的知识。

一、查看页面元素


用谷歌浏览器打开百度首页,点击右上角>更多工具>开发者工具,就可以看到整个页面的html代码了

点击框中左上角的箭头图标,移动鼠标到百度搜索框,就可以自动定位到百度搜索框的HTML代码了,查看到搜索框的属性,我们可以看到搜索框有id,name,class等属性。

二、元素定位


1、id定位: find_element_by_id()

从上面定位到的搜索框属性中,有个id="kw"的属性,我们可以通过这个id定位到这个搜索框

代码:

  1. # coding = utf-8
  2. from time import sleep
  3. from selenium import webdriver
  4.  
  5. # 驱动文件路径
  6. driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
  7. # 启动浏览器
  8. driver = webdriver.Chrome(executable_path=driverfile_path)
  9. # 打开百度首页
  10. driver.get(r'https://www.baidu.com/')
  11. # 通过id定位搜索框,并输入selenium
  12. driver.find_element_by_id('kw').send_keys('selenium')
  13. # 等待5秒
  14. sleep(5)
  15. # 退出
  16. driver.quit()

2、name定位: find_element_by_name()

从上面定位到的搜索框属性中,有个name="wd"的属性,我们可以通过这个name定位到这个搜索框

代码:

  1. # coding = utf-8
  2. from time import sleep
  3. from selenium import webdriver
  4.  
  5. # 驱动文件路径
  6. driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
  7. # 启动浏览器
  8. driver = webdriver.Chrome(executable_path=driverfile_path)
  9. # 打开百度首页
  10. driver.get(r'https://www.baidu.com/')
  11. # 通过name定位搜索框,并输入selenium
  12. driver.find_element_by_name('wd').send_keys('selenium')
  13. # 等待5秒
  14. sleep(5)
  15. # 退出
  16. driver.quit()

3、class定位:find_element_by_class_name()

从上面定位到的搜索框属性中,有个class="s_ipt"的属性,我们可以通过这个class定位到这个搜索框

代码:

  1. # coding = utf-8
  2. from time import sleep
  3. from selenium import webdriver
  4.  
  5. # 驱动文件路径
  6. driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
  7. # 启动浏览器
  8. driver = webdriver.Chrome(executable_path=driverfile_path)
  9. # 打开百度首页
  10. driver.get(r'https://www.baidu.com/')
  11. # 通过class定位搜索框,并输入selenium
  12. driver.find_element_by_class_name('s_ipt').send_keys('selenium')
  13. # 等待5秒
  14. sleep(5)
  15. # 退出
  16. driver.quit()

4、tag定位:find_element_by_tag_name()

如果懂HTML知识,我们就知道HTML是通过tag来定义功能的,比如input是输入,table是表格,等等...。每个元素其实就是一个tag,一个tag往往用来定义一类功能,我们查看百度首页的html代码,可以看到有很多div,input,a等tag,所以很难通过tag去区分不同的元素。基本上在我们工作中用不到这种定义方法,仅了解就行。下面代码仅做参考,运行时必定报错

代码:

  1. # coding = utf-8
  2. from time import sleep
  3. from selenium import webdriver
  4.  
  5. # 驱动文件路径
  6. driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
  7. # 启动浏览器
  8. driver = webdriver.Chrome(executable_path=driverfile_path)
  9. # 打开百度首页
  10. driver.get(r'https://www.baidu.com/')
  11. # 通过tag定位搜索框,并输入selenium, 此处必报错
  12. driver.find_element_by_tag_name('input').send_keys('selenium')
  13. # 等待5秒
  14. sleep(5)
  15. # 退出
  16. driver.quit()

5、link定位:find_element_by_link_text()

此种方法是专门用来定位文本链接的,比如百度首页右上角有“新闻”,“hao123”,“地图”等链接

我们来定位“新闻”这个链接元素

代码:

  1. # coding = utf-8
  2. from time import sleep
  3. from selenium import webdriver
  4.  
  5. # 驱动文件路径
  6. driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
  7. # 启动浏览器
  8. driver = webdriver.Chrome(executable_path=driverfile_path)
  9. # 打开百度首页
  10. driver.get(r'https://www.baidu.com/')
  11. # 通过link定位"新闻"这个链接并点击
  12. driver.find_element_by_link_text('新闻').click()
  13. # 等待5秒
  14. sleep(5)
  15. # 退出
  16. driver.quit()

6、partial_link定位:find_element_by_partial_link_text()

有时候一个超链接的文本很长很长,我们如果全部输入,既麻烦,又显得代码很不美观,这时候我们就可以只截取一部分字符串,用这种方法模糊匹配了。

我们用这种方法来定位百度首页的“新闻”超链接

  1. # coding = utf-8
  2. from time import sleep
  3. from selenium import webdriver
  4.  
  5. # 驱动文件路径
  6. driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
  7. # 启动浏览器
  8. driver = webdriver.Chrome(executable_path=driverfile_path)
  9. # 打开百度首页
  10. driver.get(r'https://www.baidu.com/')
  11. # 通过partial_link定位"新闻"这个链接并点击
  12. driver.find_element_by_partial_link_text('闻').click()
  13. # 等待5秒
  14. sleep(5)
  15. # 退出
  16. driver.quit()

7、xpath定位:find_element_by_xpath()

前面介绍的几种定位方法都是在理想状态下,有一定使用范围的,那就是:在当前页面中,每个元素都有一个唯一的id或name或class或超链接文本的属性,那么我们就可以通过这个唯一的属性值来定位他们。

但是在实际工作中并非有这么美好,有时候我们要定位的元素并没有id,name,class属性,或者多个元素的这些属性值都相同,又或者刷新页面,这些属性值都会变化。那么这个时候我们就只能通过xpath或者CSS来定位了。

代码:

  1. # coding = utf-8
  2. from time import sleep
  3. from selenium import webdriver
  4.  
  5. # 驱动文件路径
  6. driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
  7. # 启动浏览器
  8. driver = webdriver.Chrome(executable_path=driverfile_path)
  9. # 打开百度首页
  10. driver.get(r'https://www.baidu.com/')
  11. # 通过xpath定位搜索框,并输入selenium
  12. driver.find_element_by_xpath("//*[@id='kw']").send_keys('selenium')
  13. # 等待5秒
  14. sleep(5)
  15. # 退出
  16. driver.quit()

8、CSS定位:find_element_by_css_selector()

这种方法相对xpath要简洁些,定位速度也要快些,但是学习起来会比较难理解,这里只做下简单的介绍。

CSS定位百度搜索框

  1. # coding = utf-8
  2. from time import sleep
  3. from selenium import webdriver
  4.  
  5. # 驱动文件路径
  6. driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
  7. # 启动浏览器
  8. driver = webdriver.Chrome(executable_path=driverfile_path)
  9. # 打开百度首页
  10. driver.get(r'https://www.baidu.com/')
  11. # 通过CSS定位搜索框,并输入selenium
  12. driver.find_element_by_css_selector('#kw').send_keys('selenium')
  13. # 等待5秒
  14. sleep(5)
  15. # 退出
  16. driver.quit()

Selenium 八种元素定位方法的更多相关文章

  1. Selenium八种元素定位方法源码阅读

    接触过Selenium的都知道元素定位有八种方法,但用不同的方法在执行时有什么区别呢? 元素定位8种方法(Python版),当然还有每一个方法对应的find_elements方法 find_eleme ...

  2. selenium自动化测试——常见的八种元素定位方法

    selenium常用的八种元素定位方法 1.通过 id 定位:find_element_by_id() 2.通过 name 定位:find_element_by_name() 3.通过 tag 定位: ...

  3. Selenium:八种元素定位方法

    前言: 我们在做WEB自动化时,最根本的就是操作页面上的元素,首先我们要能找到这些元素,然后才能操作这些元素.工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素.那么我们怎么来定位他们呢? 在学 ...

  4. Selenium之WebDriver元素定位方法

    Selenium WebDriver 只是 Python 的一个第三方框架, 和 Djangoweb 开发框架属于一个性质. webdriver 提供了八种元素定位方法,python语言中也有对应的方 ...

  5. Selenium2+python自动化-八种元素定位(Firebug和Firepath)

    前言    自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇主要讲如何用firefox辅助工具进行元素定位.元素定位在这四个环节中 ...

  6. Selenium-webdriver+八种元素定位

    进行Web页面自动化测试,对页面上的元素进行定位和操作是核心.而操作又是以定位为前提的,因此,对页面元素的定位是进行自动化测试的基础. 页面上的元素就像人一样,有各种属性,比如元素名字,元素id,元素 ...

  7. selenium自动化之元素定位方法

    在使用selenium webdriver进行元素定位时,有8种基本元素定位方法(注意:并非只有8种,总共来说,有16种). 分别介绍如下: 1.name定位 (注意:必须确保name属性值在当前ht ...

  8. selenium常见的元素定位方法

    一.获取元素 1)通过谷歌浏览器自动的工具访问百度首页,我们可以看到,页面上的元素都是由一行行的代码组成的,它们之间有层级地组织起来,每个元素之间都有不同的标签和值,我们可以通过这些不同的标签和值来找 ...

  9. Selenium八种基本定位方式---基于python

    from selenium import  webdriver driver=webdriver.Firefox() driver.get("https://www.baidu.com&qu ...

随机推荐

  1. Java8新特性 - 并行流与串行流

    并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流. Java8中将并行进行了优化,我们可以很容易的对数据进行并行操作.Stream API可以声明性地通过parallel()和 ...

  2. 优先队列问题 get it !!

    首先 队列的基本用法 头文件 #include<queue> priority_queue < int/string/struct> q//  q为队列的名字 基本操作 q.p ...

  3. Spring Bean的作用域以及lookup-method标签的使用

    Spring Framework支持五种作用域,如下图所示: singleton:表示一个容器中只会存在一个bean实例,无论在多少个其他bean里面依赖singleton bean,整个容器都只会存 ...

  4. core直接获取报异常数据

    报异常直接跳转到/Home/Error [ResponseCache(Duration = , Location = ResponseCacheLocation.None, NoStore = tru ...

  5. axios 内部原理学习记录

    前提:一次面试被问到了,axios有什么特点,对比一下ajax.答的很不满意. axios是一个基于Promise的http请求库,可用于浏览器和 Node.可以说是目前最为常用的http库,有必要了 ...

  6. spark 机器学习 knn 代码实现(二)

    通过knn 算法规则,计算出s2表中的员工所属的类别原始数据:某公司工资表 s1(训练数据)格式:员工ID,员工类别,工作年限,月薪(K为单位)       101       a类       8年 ...

  7. python自动化

    自动化测试一些问题 什么是自动化测试? 自动化测试,顾名思义,自动完成测试工作.通过一些自动化测试工具或自己造轮子实现模拟之前人工点点/写写的工作并验证其结果完成整个测试过程,这样的测试过程,便是自动 ...

  8. 《The One!》团队作业4:基于原型的团队项目需求调研与分析

    项目 内容 作业所属课程 所属课程 作业要求 作业要求 团队名称 < The One !> 作业学习目标 (1)体验以原型设计为基础的团队软件项目需求获取技巧与方法.(2)学习利用UML模 ...

  9. 织梦阿里云OSS解决方案

    准备工作 申请OSS账号,并且创建一个public-read的bucket.这里需要权限为public-read是因为后面需要匿名访问. 详细步骤 1.开启织梦远程附件功能2.现在织梦还有远程附件还有 ...

  10. 网站添加logo图片

    网站添加log图片 第一种方法 这里使用的图片一般为16*16大小的图片 <link rel="shortcut icon" href="http://xxx.xx ...