在HTML中, 节点有三种常见属性, 分别是id, name和class, 其中class是一个特殊的属性, 支持多个类名, 以空格隔开, 如下图所示:

你是否注意到, 为什么selenium中的find_element_by_class_name, 是by_class_name而不是, by_class呢?

首先我们要区分class属性和class_name的区别, 节点的class属性可以包含多个class_name, 每个以空格隔开, 如上图, 该按钮实际上是一个链接, class属性值为"btn btn-primary my-2", 其中包含三个class_name, 分别为"btn", "btn-primary", "my-2", 通过在开发者工具中按Ctrl+F搜索,我们可以发现"btn-primary"这个class_name是唯一的. 我们可以使用它来定位.

定位方式有3种:

  • 通过某个独特的class_name定位: dr.find_element_by_class_name('btn-primary')
  • 使用xpath通过完整的class属性定位: dr.find_element_by_xpath('//a[@class="btn btn-primary my-2"]')
  • 使用css selector, 通过某个属性或属性组合定位(推荐):

    dr.find_element_by_css_selector('.btn-primary')dr.find_element_by_css_selector('.btn-primary.my-2')

示例代码如下:

from selenium import webdriver

dr = webdriver.Chrome()
dr.get('http://qaschool.cn/') # dr.find_element_by_class_name('btn-primary').click() # 通过某个class_name定位
# dr.find_element_by_xpath('//a[@class="btn btn-primary my-2"]').click() # 通过xpath结合完整的class属性定位 # dr.find_element_by_css_selector('.btn-primary').click() # 通过css selector结合某个class_name定位
dr.find_element_by_css_selector('.btn-primary.my-2').click() # 通过css selector结合多个class_name定位

Selenium定位class包含空格的元素-复合class节点的更多相关文章

  1. selenium定位元素(本内容从https://my.oschina.net/flashsword/blog/147334处转载)

    注明:本内容从https://my.oschina.net/flashsword/blog/147334处转载. 在使用selenium webdriver进行元素定位时,通常使用findElemen ...

  2. Python+Selenium+Unittest框架使用——Selenium——定位元素(二)

    1.定位元素(id.name.class.link.partial link) (1)find_element_by_id() 用百度定位测试,用firebug查看定位元素 ,输入框的id为“kw”, ...

  3. selenium定位元素方法汇总

    #打开网页前三步 from selenium import webdriver driver=webidriver.Chrome() driver.get("https://www.baid ...

  4. Selenium定位元素

    Commands (命令) Action对当前状态进行操作失败时,停止测试 Assertion校验是否有产生正确的值 Element Locators指定HTML中的某元素 Patterns用于模式匹 ...

  5. [Selenium]中使用css选择器进行元素定位

    参考:http://www.cnblogs.com/webblog/archive/2009/07/07/1518274.html 常见语法 * 通用元素选择器,匹配任何元素 E 标签选择器,匹配所有 ...

  6. Selenium基础知识(8大元素定位概说)

    1. By.name() 页面源码如下: [html] : <button id="gbqfba"aria-label="Google Search" n ...

  7. Selenium定位不到指定元素原因之iframe(unable to locate element)

    浏览过程中,图片中的内容可能太小,无法看清,可以>右键>在新标签中打开 Outline 项目原因,需要用selenium实现模拟登陆.模拟上传文件,自然就需要模拟点击[上传]按钮: 模拟点 ...

  8. selenium(1)-详细解读元素定位的八种方式

    安装selenium和下载webdriver 安装selenium pip install selenium pip install selenium  -U  (判断是否有最新版本) 下载drive ...

  9. selenium 定位元素

    一.单个元素的定位方式: By.className(className))By.cssSelector(selector)By.id(id)By.linkText(linkText)By.name(n ...

随机推荐

  1. pb相关小技巧或用法

    1.动态post window lwlw = w_main lw.dynamic post event ue_all(ls_no,ls_table) 2.打开隐藏窗口 IF NOT IsValid(w ...

  2. k8s-jenkins pipeline部署

  3. Linux/CentOS 配置Mysql-server过程和遇到错误解决方法

    第一步:下载mysql-server 方法1.wget url(你所要下载的链接,可以从mysq官网查找)到当前目录下 方法2.到mysql官网下载包之后通过xftp传到linux 第二步:解压tar ...

  4. Codeforces 1247F. Tree Factory

    传送门 正难则反,把链操作成树不好想,那么考虑一下如何把树变成链 每次操作相当于把一个兄弟变成儿子(我把你当兄弟你竟然想把我当儿子.jpg) 注意到每次操作最多只能使树的深度增加 $1$ 因为链的深度 ...

  5. go环境变量配置 (GOROOT和GOPATH)的区别和含义

    GOROOT就是go的安装路径 在~/.bash_profile中添加下面语句: GOROOT=/usr/local/go export GOROOT 当然, 要执行go命令和go工具, 就要配置go ...

  6. java7:核心技术与最佳实践读书笔记——类加载

    流程:class -> 加载 ->  jvm虚拟机 -> 链接 . 一.类加载器概述 1.引出      类加载器也是一个java类,java.lang.ClassLoader类是所 ...

  7. Windows phone 8 二维码生成与扫描

    1. 二维码的生成 二维码生成用到了一个第三方的插件(zxing.wp8.0) 根据指定的信息,生成对应的二维码. 代码很简单: bool falg=tbk.Text==""?fa ...

  8. 【php设计模式】桥接模式

    定义: 将抽象与实现分离,使它们可以独立变化.它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度. 角色: 抽象化(Abstraction)角色:定义抽象类,并包含一个对实现 ...

  9. vue学习(7)-路由抽离

    cnpm i vue-router -S

  10. 使用SSH命令行远程登录运行在CloudFoundry上的应用

    当我试图用如下命令行采用SSH远程登录到运行在CloudFoundry环境下的应用时, cf ssh -N -T -L 9229:127.0.0.1:9229 jerry-demo-server 遇到 ...