说明

Webdriver API详解,基于python3,unittest框架,driver版本和浏览器自行选择。 本内容需要对python3的unittest框架有一个简单的了解,这里不再赘述,不了解的同学自己百度了解一下就可以了。废话不多说直接进入正题!

简单代码框架模板

 from selenium import webdriver
import unittest class MyTest(unittest.TestCase): def setUp(self):
self.driver = webdriver.Chrome()
8
def testFunc(self): # 后面所有的实例代码直接替换这个函数或者直接在代码中添加函数即可
pass
def tearDown(self):
self.driver.quit() if __name__ == '__main__':
unittest.main()

①访问某个网址

目的:打开指定网址

测试地址:https:www.baidu.com

调用API实例代码

     def testOpenBaiduUrl(self):
'''
1.访问具体地址
:return:
'''
baseUrl = 'https://www.baidu.com/'
baseTitle = '百度一下'
self.driver.get(baseUrl)# 访问百度的网址
currTitle = self.driver.title # 获取当前页面的标题
self.assertIn(baseTitle, currTitle, msg='页面跳转失败') # 断言

②网页的前进,后退和刷新页面

目的:模拟浏览器的前进和后退功能

测试地址:

https://www.sogou.com;https://www.baidu.com

调用API实例代码

     def testBackForwardRefresh(self):
'''
前进,后退,刷新当前页面
:return:
'''
baseBaiduUrl = 'https://www.baidu.com/'
baseSogouUrl = 'https://www.sogou.com/'
self.driver.get(baseBaiduUrl)
self.driver.get(baseSogouUrl)
self.driver.back() # 后退
print(self.driver.current_url)
self.driver.forward() # 前进
print(self.driver.current_url)
self.driver.refresh() #刷新页面

③操作浏览器窗口位置

目的:窗口最大化,获取浏览器位置坐标,设置浏览器窗口位置

测试地址:https://www.baidu.com

调用API实例代码

     def testWindow(self):
'''
窗口最大化,获取当前窗口的位置,设置当前窗口的位置
:return:
'''
baseBaiduUrl = 'https://www.baidu.com/'
self.driver.get(baseBaiduUrl)
position = self.driver.get_window_position() # 获取当前窗口的位置坐标
print('当前窗口的横坐标为{}'.format(position['x']))
print('当前窗口的纵坐标为{}'.format(position['y']))
self.driver.set_window_position(400, 200) # 设置窗口的位置
print('设置后的窗口的位置坐标:{}'.format(self.driver.get_window_position()))
self.driver.maximize_window() #窗口最大化

④操作浏览器窗口的大小

目的:获取当前窗口的大小,设置当前窗口的大小

测试地址:https://www.baidu.com

调用API实例代码

     def testWindowSize(self):
'''
获取当前窗口的大小,设置当前窗口的大小
:return:
'''
baseBaiduUrl = 'https://www.baidu.com/'
self.driver.get(baseBaiduUrl)
#获取当前窗口的大小
windowSize = self.driver.get_window_size('current')
print('当前窗口的宽为{}'.format(windowSize['width']))
print('当前窗口的高为{}'.format(windowSize['height']))
#设置当前窗口的大小
self.driver.set_window_size(width=200, height=400, windowHandle='current')
print(self.driver.get_window_size('current'))

⑤获取当前页面的Title属性值

目的:获取百度页面的title属性值

测试地址:https://www.baidu.com

调用API实例代码

  def testGetBaiduTitle(self):
'''
获取页面的title属性值
:return:
'''
baseBaiduUrl = 'https://www.baidu.com/'
self.driver.get(baseBaiduUrl)
bdTitle = self.driver.title # 获取百度页面的title属性值
print(bdTitle)
self.assertEqual(bdTitle,'百度一下,你就知道',msg='页面title不正确'

⑥获取页面的url地址与页面源码

目的:获取百度页面的地址与源码

测试地址:https://www.baidu.com

调用API实例代码

     def testGetBaiduUrlSourceCode(self):
'''
获取页面的url和页面源码
:return:
'''
baseBaiduUrl = 'https://www.baidu.com/'
self.driver.get(baseBaiduUrl)
bdUrl = self.driver.current_url # 获取当前页面的url地址
print(bdUrl)
self.assertEqual(bdUrl,'https://www.baidu.com/',msg='当前页面url不正确')
sourceCode = self.driver.page_source # 获取当前页面的源码v
print(sourceCode)

⑦获取与切换浏览器窗口句柄

目的:获取当前窗口句柄,获取所有窗口句柄,句柄之间切换

测试地址:https://www.baidu.com

调用API实例代码

     def testGetwindowHandle(self):
'''
获取当前页面的句柄,切换窗口
:return:
'''
import time
baseBaiduUrl = 'https://www.baidu.com/'
self.driver.get(baseBaiduUrl)
self.driver.maximize_window()
# 获取当前窗口句柄
current_handle = self.driver.current_window_handle
print(current_handle)
#百度搜索框输入selenium并点击百度一下
self.driver.find_element_by_id('kw').send_keys('selenium')
self.driver.find_element_by_id('su').click()
time.sleep(3)
#点击selenium的百度百科连接
self.driver.find_element_by_partial_link_text('百度百科').click()
#获取所有窗口的句柄
all_handles = self.driver.window_handles
print(all_handles)
#打印新窗口的句柄
print(self.driver.window_handles[-1])
for handle in all_handles:
# 切换到新的窗口
if handle != current_handle:
self.driver.switch_to.window(handle)
self.driver.find_element_by_link_text('元素硒的英文名').click()
# 返回到原来的窗口
self.driver.switch_to.window(current_handle)
sendKeys = self.driver.find_element_by_id('kw')
sendKeys.clear()
sendKeys.send_keys('python')

⑧获取页面元素的基本信息

目的:获取页面某个元素tagname,size,text

测试地址

https://www.baidu.com

     def testGetElementInfo(self):

         baseBaiduUrl = 'https://www.baidu.com/'
self.driver.get(baseBaiduUrl)
self.driver.maximize_window()
element = self.driver.find_element_by_xpath("//a[text()='新闻']")
print('我的tag_name是{},我的text是{},我的size是{}'.format(element.tag_name,element.text,element.size))

输出:我的tag_name是a,我的text是新闻,我的size是{'height': 24, 'width': 26}

⑨获取元素的CSS属性值

目的:获取百度输入框的CSS属性值

测试地址

https://www.baidu.com

     def testGetCssInfo(self):
'''
获取元素的css属性值
:return:
'''
baseBaiduUrl = 'https://www.baidu.com/'
self.driver.get(baseBaiduUrl)
self.driver.maximize_window()
element = self.driver.find_element_by_id('kw')
print(element.value_of_css_property('height'))# 获取搜索框的高
print(element.value_of_css_property('width'))# 获取搜索框的宽
print(element.value_of_css_property('font-family'))# 获取搜索框输入的字体

输出:

22px
500px
arial

⑩输入框输入指定内容,清空输入框中的内容

目的:百度输入框输入python并清空内容

测试地址

https://www.baidu.com

  def testInputClear(self):
'''
获取元素的css属性值
:return:
'''
import time
baseBaiduUrl = 'https://www.baidu.com/'
self.driver.get(baseBaiduUrl)
self.driver.maximize_window()
element = self.driver.find_element_by_id('kw')
element.send_keys('python')# 输入指定内容
time.sleep(5)
element.clear() # 清空输入框

总结

以上共10个实例,涉及到API有get(), send_keys(),clear(),text,maximize_window(),current_url, back(), forword(), refresh(), get_window_position(), get_window_size(), set_window_position, title, current_window_handle, window_handles, value_of_css_property()等十几个方法,都是实际工作中会经常会用到的,希望对大家有所帮助,后续会陆续更新其他的API用法。

Webdriver之API详解(1)的更多相关文章

  1. Webdriver之API详解(3)

    前言 前两篇API链接 https://www.cnblogs.com/linuxchao/p/linuxchao-selenium-apione.html https://www.cnblogs.c ...

  2. Webdriver之API详解(2)

    前言:今天继续上一篇文章https://www.cnblogs.com/linuxchao/p/linuxchao-selenium-apione.html分享selenium' webdriver ...

  3. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...

  4. jqGrid APi 详解

    jqGrid APi 详解 jqGrid皮肤 从3.5版本开始,jqGrid完全支持jquery UI的theme.我们可以从http://jqueryui.com/themeroller/下载我们所 ...

  5. hibernate学习(2)——api详解对象

    1   Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...

  6. 网络编程socket基本API详解(转)

    网络编程socket基本API详解   socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...

  7. 转】Mahout推荐算法API详解

    原博文出自于: http://blog.fens.me/mahout-recommendation-api/ 感谢! Posted: Oct 21, 2013 Tags: itemCFknnMahou ...

  8. dom4j api 详解--XPath 节点详解

    dom4j api 详解 http://871421448.iteye.com/blog/1546955 XPath 节点 http://www.w3school.com.cn/xpath/xpath ...

  9. 百度地图API详解之事件机制,function“闭包”解决for循环和监听器冲突的问题:

    原文:百度地图API详解之事件机制,function"闭包"解决for循环和监听器冲突的问题: 百度地图API详解之事件机制 2011年07月26日 星期二 下午 04:06 和D ...

随机推荐

  1. svn统计代码行数(增量)

    转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10770296.html android代码,两个版本之间,代码行数增加了多少,怎么得出呢? 1.安装To ...

  2. bug生命周期&bug跟踪处理

    一.BUG BUG:软件的缺陷 1.BUG的定义:----与软件测试的目的对应 软件的BUG,狭义概念是指软件程序的漏洞或缺陷,广义概念除此之外还包括测试工程师或用户所发现和提出的软件可改进的细节.或 ...

  3. Android JS桥交互("Uncaught ReferenceError: xxx is not defined or xxx has no method")

    网上android和js交互的代码有不少,也很容易搜到.最近在做的项目需要用到js桥,遇到了一些问题,记录下来,希望以后遇到能马上解决掉. 一开始我找的demo是从这个:http://blog.csd ...

  4. ReactNative之从“拉皮条”来看RN中的Spring动画

    上篇博客我们聊了RN中关于Timing的动画,详情请参见于<ReactNative之结合具体示例来看RN中的的Timing动画>本篇博客我们将从一个“拉皮条”的一个动画说起,然后来看一下R ...

  5. Amqp整合com.rabbitmq.client.ShutdownSignalException: channel error; protocol method异常处理

    java.io.IOException at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:126) at com.rabbitmq ...

  6. 安装虚拟机,磁盘选择厚置备延迟置零与厚置备置零和Thin Provision有什么区别

    (1)厚置备延迟置零: (2)厚置备置零: (3)Thin Provision(精简置备). 这三种类型的磁盘,每一种类型的磁盘创建的方式和磁盘性能都有所不同,具体解释如下.1.厚置备延迟置零举例,本 ...

  7. c语言-自己写的库

    一.俗话说算法是程序的灵魂,这下面本人写了一部分常用算法,欢迎大家使用,并提出批评和指正,当然也可以改进或者添加. 1.这是自己实现的算法库头文件 #ifndef _INC_ALGORITHM #de ...

  8. 使用 Moq 测试.NET Core 应用 -- Mock 属性

    第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 第二篇文章, 关于方法Mock的介绍: https://www.cnbl ...

  9. 简单实现springmvc框架(servlet+自定义注解)

    个人水平比较菜,没有这么高的实力简单实现springmvc框架,我是看了一个老哥的博客,这老哥才是大神! 原文链接:https://www.cnblogs.com/xdp-gacl/p/4101727 ...

  10. Docker最全教程——数据库容器化(十)

    终于按时完成第二篇.本来准备着手讲一些实践,但是数据库部分没有讲到,部分实践会存在一些问题,于是就有了此篇以及后续——数据库容器化.本篇将从SQL Server容器化实践开始,并逐步讲解其他数据库的容 ...