1.Webdriver原理

webdirver是一款web自动化操作工具,为浏览器提供统一的webdriver接口,由client也就是我们的测试脚本提交请求,remote server浏览器进行响应请求,相对于原来selenium1中的selenium rc更加的简便,对浏览器的操作更加灵活。

2.定位

(1)元素的定位:

元素的定位可以通过id,name,class name,tag name,link_text,partial_link_text,css selector,xpath等

语法格式为:find_element_by_xxxx()

例如百度的搜索框

如果想要定位百度搜索框则可以

find_element_by_id("kw") or find_element_by_class_name("s_pt") or find_element_by_name("wd") or find_element_by_tag_name("input")

或者通过xpath定位:可以使用FirePath工具定位:

xpath:find_element_by_xpth(".//*[@id='kw']")

如果是一个文本链接可以通过link_name("文本")或者文本信息较长的可以通过部分文本信息来定位partial_link_text("部分文本")

以上的所有定位准确前提是必须保证定位元素括号中填写的信息的唯一性,才可以准确定位到元素上,例如定位class_name,必须确定仅有该元素应用到该calss name,否则请更换其他的定位方式。

有关元素的定位一般还是建议有id的,有name的,用这两者定位更加准确,xpath也是一个重要的定位方式。

*.xpath定位

虽然说xpath定位可以借用类似FirePath这样的工具来获取,但是我们还是必须清楚xpath定位的语法,以便后期我们在修改代码的时候能够清楚元素到底定位的是哪个。

xpath的路径表达式:

路径表达式 结果
bookstore 选取 bookstore 元素的所有子节点。
/bookstore

选取根元素 bookstore。

注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!

bookstore/book 选取属于 bookstore 的子元素的所有 book 元素。
//book 选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang 选取名为 lang 的所有属性。

带谓语的表达式,谓语用中括号括描述,选取所有可以用*

路径表达式 结果
/bookstore/book[] 选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng'] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

(2)定位一组对象

定位单个元素是find_element,那么定位一组对象则是find_elements

定位一组对象的情况是对需要对一组对象进行批量操作或者是需要选取多个条件一样或类似的元素,其是先选取一组对象后再根据筛选条件进行遍历过滤最终定位所需的符合条件的元素。

例如:勾选所有的checbox元素或者是对一组元素做同样的操作的时候

checbox =  find_elements_by_xx()          #首先定位一组元素
for i in checkbox: #遍历勾选所有checkbox
i.click()

(3)层级定位

很多元素都没有规范的id或者name来定位,而且元素的class name和tag name都是一样的,且又是第几层的元素,很难定位,所以定位该元素的方法是,先定位父级元素,然后再定位子级元素

例如:菜单list中子级菜单标签的定位

如果要定位新闻标签,我们可以通过先定位ul元素,再定位a元素,这样定位比较准确

parent = find_element_by_id("ul")
children = parent.find_element_by_name("tj_tnews")
chidren.click()

(4)定位Frame中的对象

有些页面的框架嵌套着另一个框架,如果需要定位被嵌套的框架里的内容则可以先定位到外部框架,再定位到被嵌套的框架,然后就可以定位里面的页面元素,其实这个思路和定位层级元素是一样的,只是这里用到定位框架的语句需要记下

switch_to_frame(id)

例如:框架A嵌套这框架B,现在需要定位框架B中的文本框

switch_to_frame(id = a)
switch_to_frame(id = b)
find_element_by_id("textboxid")

定位弹出的框架后操作完成需要跳出框架才可以定位原先页面上的元素。

driver.switch_to_frame("layui-layer-iframe1")           #定位框架
.....
driver.switch_to_default_content() 跳出框架
driver.find_element_by_xpath("html/body")

selenium + python自动化测试unittest框架学习(三)webdriver元素定位(一)的更多相关文章

  1. selenium + python自动化测试unittest框架学习(二)

    1.unittest单元测试框架文件结构 unittest是python单元测试框架之一,unittest测试框架的主要文件结构: File >report >all_case.py &g ...

  2. selenium + python自动化测试unittest框架学习(五)webdriver的二次封装

    因为webdriver的api方法很长,再加上大多数的定位方式是以xpath方式定位,更加让代码看起来超级长,为了使整体的代码看起来整洁,对webdriver进行封装,学习资料来源于虫师的<se ...

  3. selenium + python自动化测试unittest框架学习(一)selenium原理及应用

    unittest框架的学习得益于虫师的<selenium+python自动化实践>这一书,该书讲得很详细,大家可以去看下,我也只学到一点点用于工作中,闲暇时记录下自己所学才能更加印象深刻. ...

  4. selenium + python自动化测试unittest框架学习(三)webdriver对页面其他控件操作(三)

    1.对话框,下拉框 (1)对话框的有两种,一种是iframe格式的,需要switch_to_iframe()进行定位,现在大部分的对话框是div格式的,这种格式的可以通过层级定位来定位元素,先定位对话 ...

  5. selenium + python自动化测试unittest框架学习(三)webdriver元素操作(二)

    上一篇是元素的定位,那么定位元素的目的就是对元素进行操作,例如写入文本,点击按钮,拖动等等的操作 (1)简单元素操作 简单元素操作 find_element_by_id("kw") ...

  6. selenium + python自动化测试unittest框架学习(七)随机生成姓名

    在自动化测试过程中经常要测试到添加用户的操作,每次都要输入中文,原本是找了十几个中文写成了列表,然后从列表中随机取出填入用户名文本框中,随着测试的增加,发现同名的人搜索出来一大堆,最后在网上找了个随机 ...

  7. selenium + python自动化测试unittest框架学习(四)python导入模块及包知识点

    在写脚本的时候,发现导入某些模块,经常报错提示导入模块失败,这里来恶补下python导入模块的知识点. 1.模块导入时文件查找顺序 在脚本中,import xxx模块时的具体步骤: (1)新建一个mo ...

  8. selenium + python自动化测试unittest框架学习(六)分页

    接触的项目分页的形式是以下形式: 想要获取总页数后,遍历执行翻页的功能,但由于分页是以javascript方法实现的,每次点击确定按钮后,页面就回刷新,webelement元素过期无法遍历下一个进行翻 ...

  9. selenium + python 自动化测试环境搭建

    selenium + python 自动化测试 —— 环境搭建 关于 selenium Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操 ...

随机推荐

  1. groovy闭包科里化参数

    科里化闭包:带有预先绑定形参的闭包.在预先绑定一个形参之后,调用闭包时就不必为这个形参提供实参了.有助于去掉方法调用中的冗余重复. 使用curry方法科里化任意多个参数 使用rcurry方法科里化后面 ...

  2. UVA 455(最小周期)

    最小周期可以用%枚举 #include <iostream> #include <string> #include <cstring> #include <c ...

  3. python 实现websocket

    python中websocket需要我们自己实现握手代码,流程是这样:服务端启动websocket服务,并监听.当客户端连接过来时,(需要我们自己实现)服务端就接收客户端的请求数据,拿到请求头,根据请 ...

  4. String拾遗

    简介: String作为日常最常用的类,还是有必要对其中的细节做一些了解的,这篇就结合源码来看看这个常用的类. 一. 总述 类图如下: 从图中可以看到String是实现了 java.io.Serial ...

  5. SQL Server 字符串合并

    应用场景:多条数据某列数据以某种样式合并成一条数据,例如: 1    1,0    小赵    0012    2,0    小钱    002                        ==== ...

  6. PhpStorm 自定义快捷键

    PhpStorm 两个重要快捷键 1.CTRL+SHIFT+A 用于恢复隐藏项 2.文件之间的快速跳转 CTRL+SHIFT+N 3.自定义快捷键 第一步:打开左上角file-setting 第二步: ...

  7. [CTSC2008]祭祀(构造方案)

    前面的话 这道题显然就是最长反链 根据 \(Dilworth\) 定理:最小链覆盖数 = 最长反链长度 然后传递闭包跑匹配即可 \(luogu\)交了一下,\(WA\) 了 \(QAQ\) 本来各种 ...

  8. 04.CSS动画示例-->烟花

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. iview动态校验表单,获取值为undefined

    场景:实际代码如下:https://run.iviewui.com/XPofr3YS 原因:在动态校验名称时,没法获取值,请教了大神后,发现原来是自己demo没理清楚 这里的prop="na ...

  10. How To Install Cacti On Ubuntu 14

    How To Install Cacti On Ubuntu 14.04/14.10 by anismaj Cacti is an open source web based network moni ...