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基本运用的更多相关文章

  1. AutoIt实现Webdriver自动化测试文件上传

    在运用WebDriver进行自动化测试时,由于WebDriver自身的限制,对于上传文件时Windows弹出的文件选择窗口无法控制,通过在网上查找资料锁定使用AutoIt来控制文件上传窗口. Auto ...

  2. webdriver学习笔记

    该篇文章记录本人在学习及使用webdriver做自动化测试时遇到的各种问题及解决方式,问题比较杂乱.问题的解决方式来源五花八门,如有疑问请随时指正一遍改正. 1.WebDriver入门 //webdr ...

  3. Selenium WebDriver Code

    Selenium WebDriver 用于模拟浏览器的功能,可以做网站测试用,也可以用来做crawler.我是用eclipse开发的,导入selenium-server-standalone-***. ...

  4. 使用httpclient 调用selenium webdriver

    结合上次研究的selenium webdriver potocol ,自己写http request调用remote driver代替selenium API selenium web driver ...

  5. Selenium FF WebDriver 加载firebug 和设置代理

    首先这次使用的webDriver for Firefox的 由于项目的原因,需要在测试的时候加载Firebug和使用vpn,加载代理 Firefox 加载代理,可以从FF菜单上看,代理分为好几种 我这 ...

  6. selenium webdriver 右键另存为下载文件(结合robot and autoIt)

    首先感谢Lakshay Sharma 大神的指导 最近一直在研究selenium webdriver右键菜单,发现selenium webdriver 无法操作浏览器右键菜单,如图 如果我想右键另存为 ...

  7. 基于webdriver的jmeter性能测试-通过jmeter实现jar录制脚本的性能测试

    续接--基于webdriver的jmeter性能测试-Eclipse+Selenium+JUnit生成jar包 在进行测试前先将用于支持selenium录制脚本运行所需的类包jar文件放到jmeter ...

  8. 输入框三种输入方式(selenium webdriver 干货)

    在机票预定的页面,输入出发城市和到达城市输入框的时候, 发现直接使用sendkeys不好使, 大部分情况出现输入某城市后没有输入进去, 经过几天的研究,发现可以采取三种方式: 1. 先点击输入框,待弹 ...

  9. WebDriver API元素的定位

    一.以下截图为用FireBug定位的用火狐(Firefox)浏览器打开的百度首页,下面所讲述的八种定位方法,就是以该截图中的百度输入框为例子. ①.FireBug是Firefox浏览器下的开发类插件, ...

  10. Selenium WebDriver 3.0 需要注意的事项

    以下所有代码基于Java 首先,要使用WebDriver 3.0 的话 请使用JAVA 8(必要)   其次,由于W3C标准化以及各大浏览器厂商的积极跟进,自WebDriver 3.0 之后,Sele ...

随机推荐

  1. 基于Vue cli生成的Vue项目的webpack4升级

    前面的话 本文将详细介绍从webpack3到webpack4的升级过程 概述 相比于webpack3,webpack4可以零配置运行,打包速度比之前提高了90%,可以直接到ES6的代码进行无用代码剔除 ...

  2. Oracle 给予访问其他用户包的权限

    grant execute on apps.SPM_CON_INVOICE_INF_PKG to diq; grant  DEBUG on apps.SPM_CON_INVOICE_INF_PKG t ...

  3. mysql的服务器构成

    什么是实例 这里的实例不是类产生的实例对象,而是Linux系统下的一种机制 1.MySQL的后台进程+线程+预分配的内存结构. 2.MySQL在启动的过程中会启动后台守护进程,并生成工作线程,预分配内 ...

  4. webstorm开发微信小程序

    参考博客:https://www.cnblogs.com/pansidong/articles/7563155.html

  5. 常见的数据扩充(data augmentation)方法

    G~L~M~R~S 一.data augmentation 常见的数据扩充(data augmentation)方法:文中图片均来自吴恩达教授的deeplearning.ai课程 1.Mirrorin ...

  6. 实时通讯系列目录篇之SignalR详解

    一. 简单说几句 最早使用SignalR的时候大约是两年前了,记得当时是一个OA中消息的实时提醒,轮询的方式有点耗资源,WebSocket写起来又比较麻烦,最终选择了SignalR,当时是什么版本已经 ...

  7. Leetcode经典试题:Longest Substring Without Repeating Characters解析

    题目如下: Given a string, find the length of the longest substring without repeating characters. Example ...

  8. 探究ElasticSearch中的线程池实现

    探究ElasticSearch中的线程池实现 ElasticSearch里面各种操作都是基于线程池+回调实现的,所以这篇文章记录一下java.util.concurrent涉及线程池实现和Elasti ...

  9. Luogu P2158 仪仗队 题解报告

    题目传送门 [题目大意] 给定一个n×n的点方阵,求站在左下角的点能看到的点数 注意同一条直线上只能看到一个点 [思路分析] 因为是一个方阵,所以可以对称地算,那么对于半个方阵,这里假设是左上的半个方 ...

  10. CentOS下RPM方式安装MySQL5.6(转载)

    之前的项目全都在windows系统环境下部署的,这次尝试在Linux系统环境下部署,于是这次我们组织在7台主机上安装了JDK.Maven.Jboss其中一台安装了Mysql,并将局域网配置好,终于大功 ...