webDriver基本运用
import time
from selenium import webdriver
import unittest
import HTMLTestRunner
# webDriver基本应用
class TestWebdriver(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.url = "http://www.baidu.com" def tearDown(self):
self.driver.quit() def test_visitRcentURL(self):
firstVisitURL = "http://www.sogou.com"
secondVisitURL = "http://www.baidu.com"
self.driver.get(firstVisitURL)
self.driver.get(secondVisitURL)
time.sleep(5)
# 后退
self.driver.back()
# 前进
self.driver.forward()
time.sleep(5)
self.driver.quit() def test_refreshCurrentPage(self):
url = "http://www.soguu.com"
self.driver.get(url)
time.sleep(5)
#刷新当前页面
self.driver.refresh()
self.driver.quit() def test_maximizeWindow(self):
url = "http://www.baidu.com"
#最大化浏览器窗口
self.driver.get(url)
self.driver.maximize_window()
self.driver.quit() def test_window_position(self):
url = "http://www.baidu.com"
self.driver.get(url)
# 获取当前浏览器在屏幕上的位置,返回的是字典
position = self.driver.get_window_position()
print("当前浏览器所在位置的横坐标",position['x'])
print("当前浏览器所在位置的纵坐标",position['y'])
# 设置当前浏览器的屏幕上的位置
self.driver.set_window_position(x = 200,y = 400)
# 获取设置后浏览器的位置
print(self.driver.get_window_position())
self.driver.quit() def test_window_size(self):
url = "http://www.baidu.com"
self.driver.get(url)
# 获取浏览器大小,返回一个数组
sizeDict = self.driver.get_window_size()
print('当前浏览器的宽',sizeDict['width'])
print('当前浏览器的高',sizeDict['height'])
self.driver.set_window_size(width=200,height=400,windowHandle='current')
print('再次获取设置后浏览器大小',
self.driver.get_window_size(windowHandle='current'))
self.driver.quit() # 获取当前页面的title
def test_getTitle(self):
self.driver.get(self.url)
print('获取当前页面的title',self.driver.title) # 获取当前页面的源码
def test_getPageSource(self):
self.driver.get(self.url)
# 获取当前页面的源码
pageSuurce = self.driver.page_source
print(pageSuurce)
self.assertEqual(u'新闻'in pageSuurce,"页面源码中未找到新闻关键字") # 获取当前页面URL地址
def test_getCurrentPageUrl(self):
self.driver.get(self.url)
currentUrl=self.driver.current_url
print('获取当前地址',currentUrl)
self.assertEqual(currentUrl,"https://www.baidu.com",'当前页面非预期') # 获取与切换浏览器窗口句柄
def test_operateWindowHandle(self):
self.driver.get(self.url)
# 获取当前句柄
now_handle = self.driver.current_window_handle
print('获取当前句柄',now_handle)
self.driver.find_element(by="id",value= "kw").send_keys("w3cschool")
self.driver.find_element(by="id",value= "su").click()
time.sleep(3)
self.driver.find_element(by="partial link text",value="百度百科").click()
time.sleep(5)
# 获取所有句柄
all_handles = self.driver.window_handles
print("++++++",self.driver.window_handles[-1])
for handle in all_handles:
if handle == now_handle:
print("句柄相同",handle) print(handle) # 获取页面元素的基本信息
def test_getBasicInfo(self):
self.driver.get(self.url)
newElement = self.driver.find_element(by="link text",value='新闻')
# 获取新闻元素的基本信息
print('元素的标签名',newElement.tag_name)
print('元素的size:',newElement.size) # 获取页面元素的文本内容
def test_getWebElementText(self):
self.driver(self.url)
aElement = self.driver.find_element(by="link text", value='新闻')
a_text = aElement.text
self.assertEqual(a_text, u'新闻') # 判断页面元素是否可见
def test_getWebElementIsDisplayed(self):
self.driver.get(self.url)
text = self.driver.find_element(by="link text", value='新闻')
print('判断新闻是否可见',text.is_displayed()) # 判断页面元素是否可操作
def test_getWebElementIsEnabled(self):
self.driver.get(self.url)
text1 = self.driver.find_element(by="link text", value='新闻')
print('判断新闻是否可操作',text1.is_enabled()) # 获取页面元素的属性
def test_getWebElementAttribute(self):
self.driver.get(self.url)
searchBox = self.driver.find_element(by="id", value="kw")
print("搜索输入框name的属性值",searchBox.get_attribute('name'))
searchBox.send_keys(u"上海诸毅管道工程有限公司")
print('搜索框中value值',searchBox.get_attribute('value')) # 获取页面元素的css属性值
def test_getWebElementCssValue(self):
self.driver.get(self.url)
searchBox = self.driver.find_element(by="id", value="kw")
print('搜索输入框的高度',searchBox.value_of_css_property("height"))
print('搜索输入框的宽度', searchBox.value_of_css_property("width"))
font = searchBox.value_of_css_property("font - family")
self.assertEqual(font,"arial") # 清空输入框中的内容
def test_clearInputBoxText(self):
self.driver.get(self.url)
searchBox = self.driver.find_element(by="id", value="kw")
searchBox.send_keys(u"上海诸毅管道工程有限公司")
time.sleep(3)
searchBox.clear()
time.sleep(3) # 双击某个元素
def test_doubleClick(self):
self.driver.get(self.url)
inputBox=self.driver.find_element(by="id", value="su")
# 导入支持双击操作模块
from selenium.webdriver import ActionChains
# 开始双击操作
action_chains = ActionChains(self.driver)
action_chains.double_click(inputBox).perform()
time.sleep(3) # 操作单选下拉框
def test_printSelectText(self):
url = "F:\\tset1.html"
self.driver.get(url)
select = self.driver.find_element_by_name('fruit')
# 因为all_options是一组元素所以使用driver.find_elements_by_tag_name
all_options = self.driver.find_elements_by_tag_name('option')
for option in all_options:
print("选项显示文本",option.text)
print("选项值",option.get_attribute("value"))
option.click()
time.sleep(3) # 选择下拉列表元素的三种方法
def test_operateDropList(self):
url = "F:\\tset1.html"
self.driver.get(url)
# 导入select模块
from selenium.webdriver.support.ui import Select
select_element = Select(self.driver.find_element_by_xpath('//select'))
print('打印默认选中的文本',select_element.first_selected_option.text)
# 获取所有选择项的页面元素对象
all_options = select_element.options
print('打印总个数',len(all_options))
'''
is_enabled()判断元素是否可操作
is_selected()判断元素是否被选中
'''
# 判断需要的元素是可以操作并且不被选中
if all_options[1].is_enabled() and not all_options[1].is_selected():
# 方法一:通过序号选中第二个元素,序号从0开始
select_element.select_by_index(1)
print('打印已经选中的文本',select_element.all_selected_options[0].text)
self.assertEqual(select_element.all_selected_options[0].text,u'西瓜')
time.sleep(3)
# 方法二:通过选项的显示文本选择文本为猕猴桃选项
select_element.select_by_visible_text("猕猴桃")
# 断言已选中项的文本是否是猕猴桃
print('被选中的文本值',select_element.all_selected_options[0].text)
self.assertEqual(select_element.all_selected_options[0].text,u'猕猴桃')
time.sleep(3)
# 方法三:通过选项的value属性值选择value = "shanzha"选项
select_element.select_by_value("shanzha")
print('被选中的文本值',select_element.all_selected_options[0].text)
self.assertEqual(select_element.all_selected_options[0].text,u'山楂') # 断言单选列表选项值
def test_checkSelectText(self):
url = "F:\\tset1.html"
self.driver.get(url)
# 导入select模块
from selenium.webdriver.support.ui import Select
select_element = Select(self.driver.find_element_by_xpath('//select'))
# 获取页面中所有选项的元素对象
actual_options = select_element.options
# 声明一个List对象,存储下拉列表中所期望出现的文字内容
expect_optionsList = [u"桃子",u"西瓜",u"橘子",u"猕猴桃",u"山楂",u"荔枝"]
# 使用map()函数获取页面中下拉列表展示的选项内容组成的列表对象
actual_optionsList = list(map(lambda option: option.text,actual_options))
# 断言期望列表对象和实际列表对象是否完全一致
self.assertEqual(expect_optionsList,actual_optionsList) # 操作多选的选择列表
def test_operateMultipleOptionDropList(self):
url = "F:\\tset2.html"
self.driver.get(url)
# 导入select模块
from selenium.webdriver.support.ui import Select
time.sleep(2)
select_element = Select(self.driver.find_element_by_xpath('//select'))
# 通过序号选择第一个元素
select_element.select_by_index(0)
# 通过选项的文本选择山楂选项
select_element.select_by_visible_text("山楂")
# 通过选项的value属性值选择value = "mihoutao"
select_element.select_by_value("mihoutao")
# 打印所有的选中项
for option in select_element.all_selected_options:
print('所有选中的文本:',option)
# 取消所有已选中项
select_element.deselect_all()
time.sleep(2)
print("-------------再次选中3个选项--------------")
select_element.select_by_index(1)
time.sleep(2)
select_element.select_by_visible_text("荔枝")
select_element.select_by_value("jvzi")
# 通过选项文本取消已选中的文本为"荔枝"
select_element.deselect_by_visible_text("荔枝")
# 通过序号取消已选中的序号为1的选项
select_element.deselect_by_index(1)
# 通过选项的value属性取消已选中的value = "jvzi"的选项
select_element.deselect_by_value("jvzi") # 操作可以输入的下拉列表
def test_operateMultipleOptionDropList(self):
url = "F:\\tset3.html"
self.driver.get(url)
from selenium.webdriver.common.keys import Keys
self.driver.find_element_by_id("select").clear()
time.sleep(3)
# 输入的同事按下箭头键
self.driver.find_element_by_id("select").send_keys("c",Keys.ARROW_DOWN)
self.driver.find_element_by_id("select").send_keys( Keys.ARROW_DOWN)
self.driver.find_element_by_id("select").send_keys( Keys.ARROW_DOWN)
time.sleep(3) # 操作单选框
def test_operateRadio(self):
url = "F:\\tset4.html"
self.driver.get(url)
berryRadio = self.driver.find_element_by_xpath("//input[@value='berry']")
berryRadio.click()
# 断言“草莓”单选框未成功选中
self.assertTrue(berryRadio.is_selected(),u'草莓单选框未被选中')
time.sleep(2)
if berryRadio.is_selected():
watermelonRadio = self.driver.find_element_by_xpath("//input[@value='watermelon']")
watermelonRadio.click()
self.assertFalse(berryRadio.is_selected())
radioList= self.driver.find_elements_by_xpath("//input[@name = 'fruit']") for radio in radioList:
print(radio.get_attribute("value"))
if radio.get_attribute("value") == "orange":
time.sleep(3)
if not radio.is_selected():
radio.click()
self.assertEqual(radio.get_attribute("value"),"orange") # 使用Title属性识别和操作新弹出的浏览器窗口
def test_identifyPopUpWindowByTitle(self):
from selenium.common.exceptions import NoSuchAttributeException,TimeoutException
from selenium.webdriver.support import expected_conditions as Ec
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
import traceback
url = "F:\\tse5.html"
self.driver.get(url)
WebDriverWait(self.driver,10,0.2).until(Ec.element_to_be_clickable(
(By.LINK_TEXT,'sogou搜索')
)).click()
all_handles = self.driver.window_handles
print(self.driver.current_window_handle)
print(len(all_handles))
time.sleep(3)
if len(all_handles)>0:
try:
for windowHandle in all_handles:
self.driver.switch_to.window(windowHandle)
print(self.driver.title)
if self.driver.title == u"搜狗搜索引擎 - 上网从搜狗开始":
WebDriverWait(self.driver,10,0.2).until(
lambda x: x.find_element_by_id("query")).send_keys(
u"sogou首页的浏览器窗口被找到")
time.sleep(2)
except NoSuchAttributeException:
print(traceback.print_exc())
except TimeoutException:
print(traceback.print_exc())
time.sleep(3)
self.driver.switch_to.window(all_handles[0])
print(self.driver.title)
time.sleep(3)
self.assertEqual(self.driver.title,u"你喜欢的水果") # 操作Frame中的页面元素
def test_HandleFrame(self):
from selenium.webdriver.support import expected_conditions as Ec
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
url = "F:\\frameset.html"
self.driver.get(url)
# 使用索引方式进入指定的frame页面,索引号从0开始
# 所以想进入中间的frame,需要使用索引号1
# 如果没有使用此行代码,则无法找到页面中左侧frame 中的任何页面元素
self.driver.switch_to.frame(0)
# 找到左侧frame中的p标签元素
leftFrameText=self.driver.find_element_by_xpath("//p")
# 断言左侧frame中的文字是否和"这是左侧frame页面上的文字"几个关键字相一致
self.assertAlmostEqual(leftFrameText.text,u"这是左侧frame页面上的文字")
# 找到左侧frame中的按钮元素,并单击该元素
self.driver.find_element_by_tag_name("input").click()
try:
# 动态等待alert窗口出现
alertWindow = WebDriverWait(self.driver,10).until(
Ec.alert_is_present())
print('打印alert信息',alertWindow.text)
alertWindow.accept()
except TimeoutException:
print("超时")
# 使用driver.switchTo.default_content方法,从左侧frame中返回到frameset页面
# 如果不调用此行代码,则无法从左侧frame页面中直接进入其他frame页面
self.driver.switch_to.default_content()
# 通过标签名找到页面中所有的frame元素,然后通过索引进入该frame
self.driver.switch_to.frame(self.driver.find_elements_by_tag_name("frame")[1])
# 断言页面源码中是否存在"这是中间frame页面上的文字"关键字串
assert u"这是中间frame页面上的文字" in self.driver.page_source
# 在输入框中输入"我在中间frame"
self.driver.find_element_by_tag_name("input").send_keys(u"我在中间frame")
time.sleep(3)
self.driver.switch_to.default_content() self.driver.switch_to.frame(self.driver.find_element_by_id("rightframe"))
assert u"这是右侧frame页面上的文字" in self.driver.page_source
time.sleep(3)
self.driver.switch_to.default_content() # 使用Frame中的HTML源码内容操作Frame
def test_HandleFrameByPageSource(self):
url = "F:\\frameset.html"
self.driver.get(url)
# 找到页面上的所有frame页面对象,并储存到名为framesList列表中
framesList = self.driver.find_elements_by_tag_name("frame")
# 通过for循环遍历framesList中所有的frame页面,查找页面源码中含有"中间frame"的frame页面
frame = 0
for frame in range(len(framesList)):
# 进入到frame页面
time.sleep(2)
self.driver.switch_to.frame(frame)
# 判断每个frame的HTML源码中是否包含"中间frame"几个关键字
time.sleep(2)
if u"中间frame" in self.driver.page_source:
# 如果包含需要查找的关键字,则查找到页面上的p标签元素
time.sleep(2)
p = self.driver.find_element_by_xpath("//p")
# 断言页面上p元素文本内容是否是"这只中间frame页面上的文字"
time.sleep(2)
self.assertAlmostEqual(u"这是中间frame页面上的文字",p.text)
# 退出frame
self.driver.switch_to.default_content()
break
else:
# 如果没找到指定frame,则调用此行代码,返货到frameset页面中
# 以便下次for循环中能继续调用driver.switch_to.frame方法,否则会报错
self.driver.switch_to.default_content() if __name__ == "__main__":
unittest.main()
# suite = unittest.TestSuite()
# suite.addTest(TestWebdriver("test_doubleClick"))
# runner = unittest.TextTestRunner()
# runner.run(suite)
webDriver基本运用的更多相关文章
- AutoIt实现Webdriver自动化测试文件上传
在运用WebDriver进行自动化测试时,由于WebDriver自身的限制,对于上传文件时Windows弹出的文件选择窗口无法控制,通过在网上查找资料锁定使用AutoIt来控制文件上传窗口. Auto ...
- webdriver学习笔记
该篇文章记录本人在学习及使用webdriver做自动化测试时遇到的各种问题及解决方式,问题比较杂乱.问题的解决方式来源五花八门,如有疑问请随时指正一遍改正. 1.WebDriver入门 //webdr ...
- Selenium WebDriver Code
Selenium WebDriver 用于模拟浏览器的功能,可以做网站测试用,也可以用来做crawler.我是用eclipse开发的,导入selenium-server-standalone-***. ...
- 使用httpclient 调用selenium webdriver
结合上次研究的selenium webdriver potocol ,自己写http request调用remote driver代替selenium API selenium web driver ...
- Selenium FF WebDriver 加载firebug 和设置代理
首先这次使用的webDriver for Firefox的 由于项目的原因,需要在测试的时候加载Firebug和使用vpn,加载代理 Firefox 加载代理,可以从FF菜单上看,代理分为好几种 我这 ...
- selenium webdriver 右键另存为下载文件(结合robot and autoIt)
首先感谢Lakshay Sharma 大神的指导 最近一直在研究selenium webdriver右键菜单,发现selenium webdriver 无法操作浏览器右键菜单,如图 如果我想右键另存为 ...
- 基于webdriver的jmeter性能测试-通过jmeter实现jar录制脚本的性能测试
续接--基于webdriver的jmeter性能测试-Eclipse+Selenium+JUnit生成jar包 在进行测试前先将用于支持selenium录制脚本运行所需的类包jar文件放到jmeter ...
- 输入框三种输入方式(selenium webdriver 干货)
在机票预定的页面,输入出发城市和到达城市输入框的时候, 发现直接使用sendkeys不好使, 大部分情况出现输入某城市后没有输入进去, 经过几天的研究,发现可以采取三种方式: 1. 先点击输入框,待弹 ...
- WebDriver API元素的定位
一.以下截图为用FireBug定位的用火狐(Firefox)浏览器打开的百度首页,下面所讲述的八种定位方法,就是以该截图中的百度输入框为例子. ①.FireBug是Firefox浏览器下的开发类插件, ...
- Selenium WebDriver 3.0 需要注意的事项
以下所有代码基于Java 首先,要使用WebDriver 3.0 的话 请使用JAVA 8(必要) 其次,由于W3C标准化以及各大浏览器厂商的积极跟进,自WebDriver 3.0 之后,Sele ...
随机推荐
- 基于Vue cli生成的Vue项目的webpack4升级
前面的话 本文将详细介绍从webpack3到webpack4的升级过程 概述 相比于webpack3,webpack4可以零配置运行,打包速度比之前提高了90%,可以直接到ES6的代码进行无用代码剔除 ...
- Oracle 给予访问其他用户包的权限
grant execute on apps.SPM_CON_INVOICE_INF_PKG to diq; grant DEBUG on apps.SPM_CON_INVOICE_INF_PKG t ...
- mysql的服务器构成
什么是实例 这里的实例不是类产生的实例对象,而是Linux系统下的一种机制 1.MySQL的后台进程+线程+预分配的内存结构. 2.MySQL在启动的过程中会启动后台守护进程,并生成工作线程,预分配内 ...
- webstorm开发微信小程序
参考博客:https://www.cnblogs.com/pansidong/articles/7563155.html
- 常见的数据扩充(data augmentation)方法
G~L~M~R~S 一.data augmentation 常见的数据扩充(data augmentation)方法:文中图片均来自吴恩达教授的deeplearning.ai课程 1.Mirrorin ...
- 实时通讯系列目录篇之SignalR详解
一. 简单说几句 最早使用SignalR的时候大约是两年前了,记得当时是一个OA中消息的实时提醒,轮询的方式有点耗资源,WebSocket写起来又比较麻烦,最终选择了SignalR,当时是什么版本已经 ...
- Leetcode经典试题:Longest Substring Without Repeating Characters解析
题目如下: Given a string, find the length of the longest substring without repeating characters. Example ...
- 探究ElasticSearch中的线程池实现
探究ElasticSearch中的线程池实现 ElasticSearch里面各种操作都是基于线程池+回调实现的,所以这篇文章记录一下java.util.concurrent涉及线程池实现和Elasti ...
- Luogu P2158 仪仗队 题解报告
题目传送门 [题目大意] 给定一个n×n的点方阵,求站在左下角的点能看到的点数 注意同一条直线上只能看到一个点 [思路分析] 因为是一个方阵,所以可以对称地算,那么对于半个方阵,这里假设是左上的半个方 ...
- CentOS下RPM方式安装MySQL5.6(转载)
之前的项目全都在windows系统环境下部署的,这次尝试在Linux系统环境下部署,于是这次我们组织在7台主机上安装了JDK.Maven.Jboss其中一台安装了Mysql,并将局域网配置好,终于大功 ...