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. 获取SQL数据库中的数据库名、所有表名、所有字段名、列描述

    1.获取所有数据库名:    (1).Select Name FROM Master.dbo.SysDatabases orDER BY Name 2.获取所有表名:    (1).Select Na ...

  2. hdu-4612(无向图缩点+树的直径)

    题意:给你n个点和m条边的无向图,问你如果多加一条边的话,那么这个图最少的桥是什么 解题思路:无向图缩点和树的直径,用并查集缩点: #include<iostream> #include& ...

  3. poj 3694(割边+lca)

    题意:给你一个无向图,可能有重边,有q次询问,问你每次我添加一条边,添加后这个图还有多少个桥 解题思路:首先先把所有没有割边的点对缩成一个联通块,无向图一般并查集判环,然后就得到一个割边树,给你一条新 ...

  4. odoo 权限问题

    odoo 权限问题 权限组问题 权限组是为了将人员按组划分同一分配权限.权限组的建立是基于每个应用来实现的 建立一个应用的分组(可省略,主要用于创建用户时有选择项) 建立一条record记录model ...

  5. Java基础 -- 持有对象(容器)

    一 容器的用途 如果对象的数量与生命周期都是固定的,自然我们也就不需要很复杂的数据结构. 我们可以通过创建引用来持有对象,如 Class clazz; 也可以通过数组来持有多个对象,如 Class[] ...

  6. SSM框架中,controller的action返回参数给vue.js

    在SSM框架中,controller的action中,返回的是视图,即jsp页面或是ModelAndView,若是通过axios给vue传值的话,需要转换为字符串或是user实体类对象. 使用@Res ...

  7. Maven 学习总结 (六) 之 版本

    版本管理 版本管理是指项目整体版本的演变过程管理.版本控制是指借助版本控制工具(如Subversion)追踪代码的每一个变更. 为了方便团队合作,项目开发过程中,大家应该使用快照版本,快照版本机制促进 ...

  8. 使用scrapy选择器selector解析获取百度结果

    0x00 概述 需要成功安装scrapy,安装方法与本文无关,不在这多说. 0x01 配置settings 由于百度对于user-agent进行验证,所以需要添加. settings.py中找到DEF ...

  9. 使用Hexo+github搭建个人博客

    目录 创建Github仓库 环境安装 安装Node.js 安装Git 检查安装 安装Hexo 连接Hexo和Github 设置Git的用户名和邮箱 配置SSH 配置Deployment 新建第一篇博客 ...

  10. JavaScript—var lef const区别

    今天刚刚学JavaScript 因为以前学过.学起来也就轻松.今天在练习.流程控制语句的时候,用WebStrom 写的时候 var 声明变量的时候 下面老是有一条白线.开始以为是开发环境有问题 然后, ...