第一章 Selenium+WebDriver环境搭建
第二章 Selenium定位方式
第三章 元素常用属性
第四章 自动化中的三种等待
第五章 自动化浏览器设置及句柄、窗口切换操作
第六章 鼠标、键盘操作
第七章 javascript在自动化中的应用
第八章 unittest&断言
第九章 ddt数据驱动
第十章 测试框架搭建过程Python+Selenium+BeautifulReport
文章目录
一、JavaScript的简介二、浏览器对象模式BOM1、浏览器的对象模型2、windows对象3、获取窗口尺寸4、selenium执行js语句5、Location对象 三、HTML DOM Document 对象1、HTML DOM节点2、Document对象3、Document元素定位4、Document元素操作5、Document控制滚动条一、JavaScript的简介
1、JavaScript 是 Web 的编程语言,是目前最流行的脚本语言,这门语言可用于 HTML 和
web开发
2、JavaScript可以让静态HTML页面上添加一些动态效果
3、JavaScript 是可插入 HTML 页面的编程代码。
4、JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。
二、浏览器对象模式BOM
1、浏览器的对象模型
①浏览器对象模型(Browser Object Model (BOM)),允许 JavaScript 与浏览器对话。
②现代的浏览器已经(几乎)实现了 JavaScript 交互相同的方法和属性,因此它经常作为 BOM 的
方法和属性被提到
③主要介绍以下浏览器对象模型的
Windows对象 --窗体
location对象 --页面操作
document对象–页面内的元素操作(定位,点击,输入,滚动条,隐藏元素,元素的属性)
学习参考链接:/js/js_window.asp
2、windows对象
①所有浏览器都支持window对象。它代表浏览器的窗口。
②所有全局 JavaScript 对象,函数和变量自动成为window对象的成员。
③全局变量是window对象的属性。
④全局函数是window对象的方法。
⑤甚至(HTML DOM的)document对象也是window对象属性
⑥Windows对象功能:
获取浏览器窗口的尺寸
操作其他窗口方法:如打开新窗口,关闭窗口等
操作当前窗口,如:获取当前页面的地址,重新加载一个新页面,刷新当前页面等
3、获取窗口尺寸
①获取内部宽高属性:innerHeight,innerWidth单位:px(像素)
内部宽高:是指除去菜单栏、工具栏、边框等占位元素后,用于显示网页的净宽高
• window.innerHeight-浏览器窗口的内高度(以像素计)
• window.innerWidth-浏览器窗口的内宽度(以像素计)
②获取外部宽高属性:outerHeight,outerWidth 单位:px(像素)
• window.outerHeight-浏览器窗口的外部高度(以像素计)
• window.outerWidth-浏览器窗口的外部宽度(以像素计)
③打开新窗口:window.open(url)
④关闭当前窗口:window.close()
4、selenium执行js语句
driver.execute_script(js) js:就是值js的语句
# -*- coding: utf-8 -*-# @Time : /4/29 15:04# Author : 17050125from selenium import webdriverimport time# 实例化浏览器driver = webdriver.Chrome()# 打开浏览器driver.get(url="")# 浏览器窗口最大化driver.maximize_window()# 通过js打开百度新闻js = 'window.open("")'# 执行js语句driver.execute_script(js)time.sleep(3)# 获取所有句柄handles = driver.window_handles# 切换到js句柄driver.switch_to.window(handles[-1])# 关闭当前js窗口driver.execute_script('window.close()')time.sleep(3)driver.quit()
5、Location对象
Location 对象包含有关当前 URL 的信息。Location 对象是 window 对象的一部分,可通过 window.Location 属性对其进行访问。注意: 没有应用于Location对象的公开标准,不过所有浏览器都支持该对象。
①Location对象属性
window.location 对象可不带 window 前缀书写--window.location.href 返回当前页面的 href (URL)--window.location.hostname 返回 web 主机的域名--window.location.pathname 返回当前页面的路径或文件名--window.location.protocol 返回使用的 web 协议(http:或https:)--selenium执行js语句• driver.execute_script(js) js:就是值js的语句• 要想获得js的返回值,必须在js语句前加上return• js_url = "return location.href"• baidu_url = driver.execute_script(js_url)
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("")time.sleep(3)#通过执行js,获取当前窗口的url,并打印print(driver.execute_script("return location.href"))#通过执行js,获取url域名,并打印print(driver.execute_script("return location.hostname"))#通过执行js,获取当前页面路径,并打印print(driver.execute_script("return location.pathname"))#通过执行js,获取协议,并打印print(driver.execute_script("return location.protocol"))driver.quit()
②Location对象方法
window.location 对象可不带 window 前缀书写--location.assign(url) 加载新页面--location.reload() 重新加载当前页面,刷新--location.replace(url) 用输入的url替换当前的url
assign与replace的区别:
–location.assign(url) : 加载 URL 指定的新的 HTML 文档。就相当于一个链接,跳转到指定的url,当前页面会转为新页面内容,可以点击后退返回上一个页面。
–location.replace(url) : 通过加载 URL 指定的文档来替换当前文档,这个方法是替换当前窗口页面,
前后两个页面共用一个窗口,所以是没有后退返回上一页的。
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("")time.sleep(3)# 通过执行js,加载打开新页面,可以回退上一页面driver.execute_script("return location.assign('')")time.sleep(3)# 刷新当前页面driver.execute_script("return location.reload('')")time.sleep(3)# 用输入的网址替换当前的网址,无法回退上一页driver.execute_script("return location.replace('')")time.sleep(3)driver.quit()
三、HTML DOM Document 对象
1、HTML DOM节点
–在 HTML DOM (Document Object Model) 中 , 每一个元素都是 节点:
–文档是一个文档节点。
–所有的HTML元素都是元素节点。
–所有 HTML 属性都是属性节点。
–文本插入到 HTML 元素是文本节点。are text nodes。
–注释是注释节点。
2、Document对象
–当浏览器载入 HTML 文档, 它就会成为 Document 对象。
–Document 对象是 HTML 文档的根节点。
–Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。
–提示:Document 对象是 Window 对象的一部分,可通过 window.document 属性对其进行访问。
3、Document元素定位
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("")time.sleep(3)# 通过id属性值定位,value=是输入文本,再执行jsdriver.execute_script("document.getElementById('kw').value='id'")time.sleep(3)# 刷新driver.refresh()# 通过class属性值定位,value=是输入文本,再执行jsdriver.execute_script("document.getElementsByClassName('s_ipt')[0].value='classname'")time.sleep(3)driver.refresh()# 通过name属性值定位,value=是输入文本,再执行jsdriver.execute_script("document.getElementsByName('wd')[0].value='name'")time.sleep(3)driver.refresh()# 通过tagname属性值定位,value=是输入文本,再执行jsdriver.execute_script("document.getElementsByTagName('input')[7].value='tagname'")time.sleep(3)driver.refresh()# 通过css属性值定位,value=是输入文本,再执行jsdriver.execute_script("document.querySelector('#kw').value='css'")time.sleep(3)# 点击百度一下按钮元素driver.execute_script("document.getElementById('su').click()")time.sleep(3)driver.quit()
4、Document元素操作
获取元素属性值
注意:selenium执行js语句,要获取属性值的时候,需要加return!
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("")time.sleep(3)# 通过执行js,获取页面的标题并打印print(driver.execute_script("return document.title"))# 通过执行js,获取元素class属性值并打印print(driver.execute_script("return document.getElementById('su').className"))# 通过执行js,获取元素元素的文本值并打印print(driver.execute_script("return document.querySelector('#s-top-left > a:nth-child(1)').text"))# 通过执行js,获取元素元素的文本值并打印print(driver.execute_script("return document.querySelector('#s-top-left > a:nth-child(1)').textContent"))driver.quit()
5、Document控制滚动条
①滚动条:横向滚动条、纵向滚动条
②对于纵向滚动条,我们要获取滚动条的高度;对于横向滚动条则需要获取他的宽度
document.body.scrollHeight 获取对象的滚动高度
document.body.scrollWidth 获取对象的滚动宽度
③滑动滚动条:window.scrollTo(x,y) 方法可把内容滚动到指定的坐标
④滑动到页面底部
左下角:window.scrollTo(0,document.body.scrollHeight)
右下角:window.scrollTo(document.body.scrollWidth,document.body.scrollHeight)
指定位置:window.scrollTo(0,数值)
滑动到指定元素:ele.srollIntoView() --》 true:默认值-与元素顶部对齐,false:与元素底部对齐
document.querySelector(‘h3.c-gap-bottom-small:nth-child(1) > a:nth-child(1)’).scrollIntoView()
document.querySelector(‘h3.c-gap-bottom-small:nth-child(1) > a:nth- child(1)’).scrollIntoView(false)
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("")driver.maximize_window()time.sleep(3)# js滑动滚动条到底部driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")time.sleep(3)# js滑动滚动条到中间driver.execute_script("window.scrollTo(0,document.body.scrollHeight/2)")time.sleep(3)driver.quit()
随手点赞一次,运气增加一份。