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. odoo 配置文件参数大全

    odoo 数据库配置文件参数 [options] ; addons模块的查找路径 addons_path = E:\GreenOdoo8.0\source\openerp\addons ; 管理员主控 ...

  2. Monte Carlo Method(蒙特·卡罗方法)

    0-故事: 蒙特卡罗方法是计算模拟的基础,其名字来源于世界著名的赌城——摩纳哥的蒙特卡罗. 蒙特卡罗一词来源于意大利语,是为了纪念王子摩纳哥查理三世.蒙特卡罗(MonteCarlo)虽然是个赌城,但很 ...

  3. app Inventor

    什么是App Inventor  ? MIT 官方网站 http://ai2.appinventor.mit.edu/Ya_tos_form.html 广州中文镜像网站 http://app.gzjk ...

  4. Java复习总结——继承

    访问权限 Java中有三个访问权限修饰符:private.protected以及public,如果不加访问修饰符,表示包级可见. 可以对类或类中的成员(字段以及方法)加上访问修饰符. 类可见表示其他类 ...

  5. BAT面试经验分享——iOS高级开发工程师的自我总结!

    序言 目前形势,参加到iOS队伍的人是越来越多,甚至已经到供过于求了. 今年,找过工作人可能会更深刻地体会到今年的就业形势不容乐观,随着各大公司秋招的开始,很多小伙伴都行动起来了,我也有幸获得了一份不 ...

  6. java第一课 面向对象的编程概念

    一.什么是对象(object)? 对象是相关状态和行为的软件包. 1.现实社会的对象都有两个共同特征:状态和行为.如:狗有状态(名称,颜色,品种,饥饿)和行为(吠叫,取出,摇尾). 2.软件对象在概念 ...

  7. socket(TCP)通讯之Python实现

    1.Service address = ('localhost', 9102) # AF_INET = ipv4; SOCK_STREAM:TCP s = socket.socket(socket.A ...

  8. MD5算法 —— C语言实现(字符串的加密)

    转 https://blog.csdn.net/weixin_42167759/article/details/81209320 网上找到的实现md5函数代码,包括一个头文件md5.h和一个源文件md ...

  9. mysql中整数类型后面的数字,比如int(11),11代表11个字节吗?

    原先对mysql不太理解,但也没有报错.但理解的不够深入.这次补上. 原来以为int(11)是指11个字节,int(10)就是10个字节.我错了. http://zhidao.baidu.com/li ...

  10. vue md5

    安装 cnpm install js-md5 --save 使用 import md5 from 'js-md5' md5('要加密的内容')