(一)  前言

Web应用以及包含超文本标记语言(HTML)、层叠样式表(CSS)、JS脚本的WEB页面,基于用户的操作(例如点击提交按钮),浏览器向WEB服务器发送请求,WEB服务器响应请求,返回给浏览器HTML及相关的JS、CSS、图片等资源,浏览器使用这些资源生成WEB页面,其中包含WEB各种视觉元素,例如文本框、按钮、标签、图标、复选框、下拉框、图片等,这些视觉元素或控件都被Selenium称为页面元素(webelements)。

想要让Selenium执行我们想要的操作,首先必须让Selenium识别需要操作的元素,就像人通过眼睛去识别一样,Selenium通过定位元素的方法去识别页面元素,可以通过ID、

name、class属性定位,以及Xpth和CSS选择器定位,或者直接通过文本进行定位。

(二)  使用谷歌检查页面元素(根据自己的使用习惯选择浏览器)

(1)   单击鼠标右键,选择“检查”。

(2)   需要使用Xpth或CSS选择器时,可以在Elements窗口,Ctrl+F打开搜索框,在搜索框中输入Xpth或CSS表达式,匹配的元素会高亮显示(黄色部分),如果有多个匹配,搜索框的右侧会显示匹配数量。

(三)  元素定位

就如人工操作时,输入查询条件,然后点击【查询】按钮,前提是首先要知道这个是搜索框,这个是【查询】按钮一样,Selenium在执行功能操作之前,也要先识别这些元素。下面是Selenium提供的8种find_element_by 方法,用于定位页面元素。
方法
简单说明
find_element_by_id()
通过页面元素的id来定位
find_element_by_name()
通过页面元素的name来定位
find_element_by_class_name()
通过页面元素的class名来定位
find_element_by_tag_name()
通过页面元素的tag name(标签名称)来定位
例如:find_element_by_tag_name('input')
find_element_by_xpath()
通过Xpth来定位
find_element_by_css_selector()
通过CSS选择器来定位
例如:find_element_by_css_selector('#zzk_q')
find_element_by_link_text()
通过元素标签对之间的文本来定位
例如:find_element_by_link_text('园子')
find_element_by_partial_link_text()
通过元素标签对之间的部分文本来定位
例如:find_element_by_partial_link_text('ET技术')
 

(1)   如果加s(find_elements_by),就是返回一个列表(一组元素),不加的话就是返回一个元素,如果找不到元素就会抛出NoSuchElementException异常。

(2)   也可以用find_element(By.ID,'')这种写法,使用这种方式要先导入By模块

from selenium.webdriver.common.by import By

(3)   要使用CSS选择器,可以参考jquery 语法关于选择器的那部分

http://www.runoob.com/jquery/jquery-selectors.html

注:另外比较特殊的是class属性,class属性有空格时,空格并不是一般认识中的空格符号,而是代表这个标签有多个class名,定位的时候使用第一个名称,或者不同名称之间用.分开就行了。

例如:淘宝首页这个标签<div class="promo J_Promo tb-loading"></div>,可以用div.promo 或 div.promo.J_Promo 或 div.promo.J_Promo.tb-loading 定位

Python+Selenium笔记(六):元素定位的更多相关文章

  1. python+selenium页面自动化 元素定位实际遇到的各种问题(持续更新)

    1.class属性有空格  (已验证) 当classname 中存在空格的时候,直接使用find_element_by_class_name时,会显示定位失败,此时,需要将classname中的空格替 ...

  2. Python selenium PO By.XPATH定位元素报错

    Python selenium PO  By.XPATH定位元素报错 如下代码经常报错: # 首页的“新建投放计划”按钮 new_ads_plan = (By.XPATH, "//*[tex ...

  3. Python3-Selenium自动化测试框架(二)之selenium使用和元素定位

    Selenium自动化测试框架(二)之selenium使用和元素定位 (一)selenium的简单使用 1.导包 from selenium import webdriver 2.初始化浏览器 # 驱 ...

  4. Python学习笔记六

    Python课堂笔记六 常用模块已经可以在单位实际项目中使用,可以实现运维自动化.无需手工备份文件,数据库,拷贝,压缩. 常用模块 time模块 time.time time.localtime ti ...

  5. selenium+java二元素定位

    页面元素定位是自动化中最重要的事情, selenium Webdriver 提供了很多种元素定位的方法.  测试人员应该熟练掌握各种定位方法. 使用最简单,最稳定的定位方法. 自动化测试步骤 定位元素 ...

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

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

  7. python+selenium笔记(一):元素定位方法

    一.环境准备: 1.浏览器选择:Firefox 2.安装插件:Firebug和FirePath(设置>附加组件>搜索:输入插件名称>下载安装后重启浏览器) 3.安装完成后,页面右上角 ...

  8. 【转】【selenium+Python WebDriver】之元素定位不到解决办法

    感谢: 煜妃的<Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)> ClassName定位报错问题:<[Python] ...

  9. 【转载】【selenium+Python WebDriver】之元素定位

    总结: 感谢: “煜妃”<Selenuim+Python之元素定位总结及实例说明> “Huilaojia123”<selenium WebDriver定位元素学习总结> “上海 ...

随机推荐

  1. Redis笔记(1)数据结构与对象

    1.前言 此系列博客记录redis设计与实现一书的笔记,提取书本中的知识点,省略相关说明,方便查阅. 2.基本数据结构 2.1 简单动态字符串SDS(simple dynamic string) 结构 ...

  2. 使用 AngularJS & NodeJS 实现基于 token 的认证应用

      认证是任何Web应用中不可或缺的一部分.在这个教程中,我们会讨论基于token的认证系统以及它和传统的登录系统的不同.这篇教程的末尾,你会看到一个使用 AngularJS 和 NodeJS 构建的 ...

  3. Linux-(telnet,wget)

    telnet命令 telnet命令通常用来远程登录.telnet程序是基于TELNET协议的远程登录客户端程序.Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和 ...

  4. mysqlbinlog命令介绍及实战

    MySQL的binlog日志的作用 - 1:用来记录mysql内部增删改查等对MySQL数据有更新内容的记录.像show和select一般不会记录 - 2:mysqlbinlog --base64-o ...

  5. git第二节----git clone与git tag

    @git 远程克隆(clone)仓库,将远程工程clone到本地仓库:默认克隆远程master 分支 git clone  https://github.com/kaokaozhu/Test.git ...

  6. SpringBoot 配置热部署

    做个记录,以免忘记: 1. 在 pom.xml 文件中的 dependencies 标签以内添加组件 devtools,具体内容如下: <!-- SpringBoot 热部署组件 devtool ...

  7. smarty 模板标签

    smarty 模板标签 变量标签 数组变量标签 变量调节器 条件标签 循环标签 数组变量标签 模板加载标签 预定义变量标签 常量标签

  8. GCD之Source

    参考:http://blog.csdn.net/lengshengren/article/details/12905811

  9. JS中for循环变量作用域--解决for循环异步执行的问题

    被这个问题困惑了很久,终于在网上找到了答案,感谢~ 现在分享给大家~ js中如何让一个for循环走完之后,再去执行下面的语句? 这涉及for循环变量作用域的问题,js中作用域只有函数作用域和全局作用域 ...

  10. 【转】GDI+中发生一般性错误的解决办法

    今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现“GDI+中发生一般性错误”的异常. 于是开始 ...