selenium 原理

就是通过webdriver 给浏览器的驱动发送命令,打开浏览器,建立http通信请求 然后通过发送各种命令让浏览器
进而执行各种操作

xpath 语法

#xpath定位总结:
'''
nodename 选取此节点的所有子节点。
/ 从根节点选取。绝对定位
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 相对定位
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。
* 通配符。匹配所有元素节点
@* 通配符。匹配元素的所有属性
'''
'''
轴运算:
ancestor:祖先结点 包括父
parent:父结点
preceding: 当前元素节点标签之前的所有结点。(html页面先后顺序)
例://div//table//td//preceding::td
preceding-sibling: 当前元素节点标签之前的所有兄弟结点
following: 当前元素节点标签之后的所有结点。(html页面先后顺序)
following-sibling:当前元素节点标签之后的所有兄弟结点
'''
'''
函数使用:
text():元素的text内容 例://*[@id="XXX"]//p[text()="XXXX"]
contains(属性/text(),value):包含函数。例:contains(@class,"XXXX")、contains(text(),"XXXX")
'''
'''
逻辑运算:
and 表示条件与。
or 表示条件或。
例://div[@class="XXX" and contains(@style,"display:visibility")]
'''

4. driver.close() 关闭浏览器当前的窗口
5. driver.quite() 退出浏览器
6. driver.back()返回前一页面
7. driver.forward() 前进
8.driver.refresh() 刷新
9. driver.title() 获取窗口标题
10。 driver.current_url 获取url
driver.current_window_handle 获取当前窗口的句柄 身份证id

对文本元素的四种基本操作
1. driver.fin.......get_attribute("value") 获取元素的属性值
2. driver.fin.......text 获取元素的文本
3. .click() 点击操作
4. sendkeys() 输入操作

常用页面操作3

等待方式
1. time.sleep()

2.智能等待

隐式等待 implicitly_wait(秒) 设置等待时长,在这个时间内加载完成,则执行下一步
添加一次就行,全局通用

3.显性等待
WebDriverWait类
WebDriverWait(driver,等待时长,轮循周期默认值0.5秒).until(判断条件)/until_not() 直到这个条件不成立

4. expected_conditions模块:提供了一系列期望发生的条件
presence_of_element_located(里面是个元祖(by.跟定位方式,"表达式")):元素存在
visibility_of_element_located:元素可见
element_to_be_clickable:元素可点击

使用之前需要导入的库
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

窗口切换
1.获取当前所有的窗口
windows =driver.window_handles 得到是一个list 取值 -1得到当前的窗口,因为当前的窗口一定是你最后打开的那个窗口
取值 0 切换到第一个窗口
2.driver.current_window_handle 获取当前窗口的句柄

3. Ec.new_window_is_opened(+获取到的窗口句柄)
这个函数可以判断有没有新窗口出现

driver.switch_to.window(windows[-1]) 进行窗口的切换
如果新窗口出现就进行切换
这种方式更保险些

iframe切换

1.首先要判断下是否在iframe里面,如果在才需要进行切换
driver.switch_to.frame()参数可以是 name index webelement

2.退出iframe 回到默认的html页面
driver.switch_to.default_content() 直接回到顶层
如果iframe 有多层嵌套只能一个个切换
driver.switch_to.parent_frame() 切换到上一级iframe

方式二 进行iframe 的切换

EC.frame_to_be_available_and_switch_to_it()
里面的参数可以是 name id 的属性名,还可以是一个元祖 (By.xxx,"定位方式的属性") ,还可以是一个webelenment
跟等待配合使用 并进行ifram 的切换

alert弹窗

switch_to.alert 切换到alert弹框 跟confirm 弹窗

alert() 这个方法有返回值
.text 获取他的文本
.accept() 接受这个弹窗 弹窗就会消失,关闭
.dismiss() 拒绝这个弹框
.sendkeys() 如果有输入的地方还可以输入

EC.alert_is_present() 里面不需要参数 alert弹窗可见

然后切换到弹窗

进行处理

对下拉列表进行处理
select option
selenium 提供了 select类来处理select option
引入类
from selenium.webdriver.support.ui import Select
Select 类有初始化函数,需要传入一个select标签的对象,然后才能调用里面的方法

1、通过下标选择 select_by_index(index) 索引从0开始
2、通过value属性select_by_value(value值)
3、通过文本内容select_by_visible_text(文本内容)

执行js 使用js 定位页面元素

js = '里面写js代码'
driver.execute.script(js)

滚动条操作
1. 先找到元素
element = driver.findxxxxxxx.
2.再讲元素拖动到可见区域
driver.execute_script('arguments[0].scorlllntoView();',element) 这个函数的参数有两个,一个是js脚本,还可以传一个web对象

arguments[0] 这样写就可以取到这个 element这个参数 然后执行scorlllntoView() 操作,把这个元素拖到可见区域

3. 在操作元素

element.xxxx()

百度搜索

参考:

@classmethod
用例前置:setUpClass(cls)
就是整个类只执行一次,针对的是一个类 使用@classmethod 装饰器

@classmethod
用力后置:tearDownClass(cls)

setUp()、tearDown()、针对的是每个测试用例,一个测试用例会执行一次

浏览器快捷键:

ctrl +f  查找元素

ctrl+shift+c   悬浮框里卖弄的元素显示。

web自动化的一些基础知识的更多相关文章

  1. Web端即时通讯基础知识补课:一文搞懂跨域的所有问题!

    本文原作者: Wizey,作者博客:http://wenshixin.gitee.io,即时通讯网收录时有改动,感谢原作者的无私分享. 1.引言 典型的Web端即时通讯技术应用场景,主要有以下两种形式 ...

  2. 想入门Web安全,这些基础知识都学会了吗?

    毕业季已经正式告一段落,这届毕业生都找到心仪的工作了吗? 正在实习期或者试用期的职场新人,是否在岗位上做的风生水起? 工作了一两年,从未升职加薪的菜鸟,还愿意继续原地踏步吗? 在校学生.IT从业者.毕 ...

  3. web前端篇:html基础知识

    目录 1.web前端: 2.HTML概述 2.1HTML介绍 2.2HTML在计算机中如何表现 3.HTML基础语法 4.练习题: 1.web前端: 什么是web? web 就是网页,是一种基于B/S ...

  4. web开发必备-网络基础知识---记录一下

    1.osi 7层网络模型 2.socket 套接字编程 PS:一个从事web开发的人来说,我们是使用http协议来和服务器来进行交互.后面会详细的分析这个过程.

  5. 初学者入门web前端:C#基础知识:函数

    入行前端对函数的掌握程度有可能直接影响以后工作的效率,使用函数可以高效的编写编码,节省时间,所以我整理了C#中最基础的函数知识点,虽然我在学习中 遇到很多问题,但是只要能够解决这些问题,都是好的. 一 ...

  6. web前端之html基础知识初级

    html 基础标签 单标签 1.注释标签: ctrl+/ 换行标签: 横线标签: 标题标签: 段落标签: 表示强调标签: 文字 属性:文字加颜色 color:改变文字颜色 size:改文字大小属性 例 ...

  7. 安全测试-WEB安全渗透测试基础知识(四)

    .4. HTTP标准 1.4.1. 报文格式 1.4.1.1. 请求报文格式 <method><request-URL><version> <headers& ...

  8. Web自动化必会知识:「Web基础、元素定位、元素操作、Selenium运行原理、项目实战+框架」

    1.web 基础-html.dom 对象.js 基本语法 Dom 对象里面涉及元素定位以及对元素的修改.因为对元素操作当中涉及的一些 js 操作,js 基本语法要会用.得要掌握前端的基本用法.为什么要 ...

  9. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

随机推荐

  1. 20171016 Python的安装

    Linux: wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz.asc tar zxvf Python-2.7.13.tg ...

  2. Java9新特性系列(module&maven&starter)

    上篇已经深入分析了Java9中的模块化,有读者又提到了module与starter是什么关系?本篇将进行分析. 首先先回顾下module与maven/gradle的关系: module与maven/g ...

  3. 数据库SQL语言从入门到精通--Part 4--SQL语言中的模式、基本表、视图

    数据库从入门到精通合集(超详细,学习数据库必看) 前言: 使用SQL语言时,要注意SQL语言对大小写并不敏感,一般使用大写.所有符号一定是西文标点符号(虽然是常识,但我还是提一嘴) 1.模式的定义与删 ...

  4. 图论--割边--Tarjan模板

    #include<iostream> #include<stdio.h> #include<vector> using namespace std; const i ...

  5. mock-server 之 mock 接口测试

    1.mock 介绍 mock 除了用在单元测试过程中,还有一个用途,当前端开发在开发页面的时候,需要服务端提供 API 接口,此时服务端没开发完成,或者说没搭建测试环境,这个时候前端开发会自己 moc ...

  6. Centos7 搭建bind9.9

    DNS服务器概述: DNS(Domain Name System),即域名系统. DNS服务器分为三种: 主域名服务器(Master Server).辅助域名服务器(Slave DNS).缓存服务器( ...

  7. Docker 快速安装Jenkins完美教程 (亲测采坑后详细步骤)

    一.前言 有人问,为什么要用Jenkins,在一些中小型企业?我说下我以前开发的痛点,每次开发一个项目完成后,需要打包部署,可能没有专门的运维人员,只能开发人员去把项目打成一个war包,可能这个项目已 ...

  8. 面试官:你说你懂i++跟++i的区别,那你会做下面这道题吗?

    面试官:你说你懂i++跟++i的区别,那你知道下面这段代码的运行结果吗? 面试官:"说一说i++跟++i的区别" 我:"i++是先把i的值拿出来使用,然后再对i+1,++ ...

  9. Spring官网阅读(二)(依赖注入及方法注入)

    上篇文章我们学习了官网中的1.2,1.3两小节,主要是涉及了容器,以及Spring实例化对象的一些知识.这篇文章我们继续学习Spring官网,主要是针对1.4小节,主要涉及到Spring的依赖注入.虽 ...

  10. 操作系统实验——PV操作实现生产者消费者模型

    操作系统PV操作之--生产者消费者模型 个人博客主页 参考资料: Java实现PV操作 | 生产者与消费者 浙大公开课 在操作系统的多进程.多线程操作中经常会有因为同步.互斥等等问题引发出的一系列问题 ...