一. Selenium2 WebDriver

  • 当Selenium2.x提出了WebDriver的概念后,它提供了完全另外的一种方式与浏览器交互
  • 那就是利用浏览器原生的API,封装成一套更加面向对象的Selenium WebDriver API,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏、窗口大小、启动、关闭、安装插件、配置证书之类的)

  • 由于使用的是浏览器原生的API,速度大大提高,而且调用的稳定性交给了浏览器厂商本身,显然是更加科学

  • 然而带来的一些副作用就是,不同的浏览器厂商,对web元素的操作和呈现多少会有一些差异,这就直接导致了Selenium WebDriver要分浏览器厂商不同,而提供不同的实现

  • 例如Firefox就有专门的FirefoxDriver,Chrome就有专门的ChromeDriver等等(甚至包括了AndroidDriver和IOS WebDriver)

二. Selenium环境搭建以及原理解释

简而言之,就是selenium里面的webdriver会直接控制浏览器(通过不同浏览器的驱动),然后对目标进行测试—>UI层面的

三. 常用方法

1. 创建对象driver

driver = webdriver.Chrome()

2. 浏览器中加载url

driver.get(url)

3. 浏览器窗口最大化

driver.maximize_window()

4. 浏览器窗口固定大小

driver.set_window_size(x, y)

5. 向前

driver.forward()

6. 后退

driver.back()

7. 刷新

driver.refresh()

8. 截屏

driver.get_screenshot_as_file(filename)

9. 设置等待时间:时间单位为s,有时候页面元素加载不全的时候,我们需要去用等待时间,等待页面加载完全

import time

time.sleep(n)

10. 获得当前页面的url

driver.current_url

11. 获得当前页面的标题

driver.title

12. 退出

driver.quit()   用于结束进程,关闭所有的窗口,最后测试结束的时候,建议大家用quit
close()         用于关闭当前窗口,当打开的窗口较多时,就可以用close关闭部分窗口

四. 常用定位

find_element_by_XXX  只返回符合定位表达式的html页面中的第一个元素

find_elements_by_XXX  返回的是一个列表

以百度首页为例

1. id定位(优先使用id,但如果id是动态生成的,就不能使用了)

id中带数字的就要注意一下,看是不是动态的

driver.find_element_by_id("kw)

2. class定位

driver.find_element_by_class_name("s_ipt)
driver.find_elements_by_class_name("s_ipt)

3. name定位

driver.find_element_by_name("wd)
driver.find_elements_by_name("wd)

4. tag name定位

driver.find_element_by_tag_name("input)
driver.find_elements_by_tag_name("input)

5. link text定位

driver.find_element_by_link_text("贴吧")           #利用全部link文本定位

6. partial link text定位

driver.find_element_by_partial_link_text("贴")   #利用部分link文本定位

7. xpath定位

driver.find_element_by_xpath()
driver.find_elements_by_xpath()

8. CSS定位

CSS中,  #id值   .class值   写法是标签名[属性名=值]

CSS中用空格表示层级关系, 如 span input中sapn是input的父级

实例1:通过id来定位输入框,前面的*表示标签名

实例2:通过属性name来定位输入框,前面的*表示标签名  

实例3:通过class定位输入框

实例4:层级定位,用空格分割

五. xpath定位

1. 绝对路径定位:以 "/"  开头,从文档的根节点开始解析。可使用浏览器调试工具,来直接获得xpath语句

2. 绝对路径的缺点

当页面结构有调整的时候,路径也随之失效,必须重写,不方便后期维护

3. 相对路径定位:以"//"开头,从文档的任何元素节点开始解析

其他语法:

表达式 描述
nodename 选取此节点的所有子节点
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性, 举例://div[@属性名称="属性值"]
* 通配符,匹配所有

实例1:定位百度输入框,根据属性name="wd"   (可在谷歌浏览器调试工具中按Ctrl + F打开定位输入框)

实例2:如果//标签[@属性]仍然有多个元素,可考虑层级定位,举个例子,如果input有多个时,可考虑层级定位(找父级或父级以上)

4. xpath定位和函数和逻辑

函数和逻辑 描述 举例
text() 元素的text内容 //*[@id="xxx"]//p[text()="xxxx"]
contains(@属性/text(), value) 包含函数 contains(@class, "xxx"), contains(text(), "xxxx")

and

or

表示条件与

表示条件或

//div[@class="xxx" and contains(@style, "display:visibility")]

实例1:利用xpath text()函数定位

实例2:利用xpath contains()函数定位

实例3:利用xpath 逻辑与定位

5. 弹出框问题

一个页面的几个操作,都会有弹出框出现,定位到弹出框会有几个,但通过display的值来定位到当前显示的那一个

  • "display=none"表示无弹出框

  • "display=block/visibility"表示有弹出框

实例1:百度有弹出框的页面

实例2:百度无弹出框的页面

web自动化:selenium原理和元素定位(一)的更多相关文章

  1. 【python+selenium的web自动化】- 8种元素定位方式详解

    ​ 我们在做WEB自动化时,最根本的就是操作页面上的各种元素,而操作的基础便是元素的定位,只有准确地定位到唯一元素才能进行后续的自动化控制,下面将对各种元素定位方式进行总结归纳. ​ 说明:以下操作统 ...

  2. UI自动化(selenium+python)之元素定位的三种等待方式

    前言 在UI自动化过程中,常遇到元素未找到,代码报错的情况.这种情况下,需要用等待wait. 在selenium中可以用到三种等待方式即sleep,implicitly_wait,WebDriverW ...

  3. selenium+java二元素定位

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

  4. Selenium Web 自动化 - Selenium常用API

    Selenium Web 自动化 - Selenium常用API 2016-08-01 目录 1 对浏览器操作  1.1 用webdriver打开一个浏览器  1.2 最大化浏览器&关闭浏览器 ...

  5. Selenium Web 自动化 - Selenium(Java)环境搭建

    Selenium Web 自动化 - Selenium(Java)环境搭建 2016-07-29 1 下载JDK JDK下载地址:http://www.oracle.com/technetwork/j ...

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

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

  7. Web自动化selenium技术快速实现爬虫

    selenium是大家众所周知的web自动化测试框架,主要用来完成web网站项目的自动化测试,但其实如果要实现一个web爬虫,去某些网站爬取数据,其实用selenium来实现也很方便. 比如,我们现在 ...

  8. Selenium 八种元素定位方法

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

  9. 软件WEB自动化测试工具之智能元素定位

    江湖一直有着这么一句名言“天下武功,唯快不破".那么在软件测试领域,自然而然我们会想到软件自动化测试.软件自动化测试的实现自然离不开软件自动化测试工具.软件自动化测试工具是软件自动化的载体, ...

随机推荐

  1. 【转】@javax.ws.rs Webservice注解

    用于webservice. 1.路径 @javax.ws.rs.Path 标识要请求的资源类或资源方法的uri路径. 例,@Path("animal"),表示下一层路径是anima ...

  2. 一直没有敢发的NOIP2018游记

    一直没有敢发的NOIP2018游记 NOIP2018游记 教练说知足是最好的,尽吾志而也不能及者,可以无悔矣.在这次考试中的表现令我还是十分满意的.(笑) D1 T0 我配置背得感觉很好,我考场上直接 ...

  3. java中使用axis发布和调用webService及dom4j解析xml字符串

    工作中需要调用webService服务,这里记录一下如何在java中发布和调用webService. 需要的jar包: webService服务端: import javax.jws.WebMetho ...

  4. LeetCode-day05

    45. Single Number 在个数都为2的数组中找到个数为1的数 46. Missing Number 在数组中找到从0到n缺失的数字 47. Find the Difference 找两个字 ...

  5. net mvc 利用NPOI导入导出excel

    1.导出Excel : 首先引用NPOI包(Action一定要用FileResult) /// <summary> /// 批量导出需要导出的列表 /// </summary> ...

  6. python并发编程之多进程1--(互斥锁与进程间的通信)

    一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...

  7. 解释python中的help()和dir()函数

    help函数是一个内置函数,用于查看函数或模块用途的详细说明 import copy print(help(copy.copy)) Help on function copy in module co ...

  8. Django ORM --- 建表、查询、删除基础

    1.什么是ORM ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的 ...

  9. springboot中Controller没有被扫描

    今天给客户开发登陆的密码加密需求,研究一下想,需要在本地搭一套环境,前台用js实现RAS加密,后台使用java解密.本是一套非常简单的环境,看最近springboot比较常用,所以想要搭一下sprin ...

  10. jq .attr()和.prop()方法的区别

    今天在nodejs交流群里面遇到别人在里面说面试的时候遇到了这个问题,没回答出来,面试官讲的他也不明白,这个问题看着很简单,但是往深的解释就很难了. 对于HTML元素本身就带有的固有属性,在处理时,使 ...