前置步骤:


  安装selenium,chrome驱动,Python3.6

学习目的:


  常见API的使用

涉及的API:


step1: 访问一个网址

step2: 网页的前进和后退

step3: 刷新当前页面

step4: 浏览器窗口最大化

step5: 获取并设置当前窗口的位置

step6: 获取并设置当前窗口的大小

step7: 获取页面的title属性值

step8: 获取页面HTML源代码

step9: 获取当前页面的URL

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

step11:获取页面元素的基本信息

step12: 获取页面元素的文本内容

step13: 判断页面元素是否可见

step14: 判断页面元素是否可操作

step15: 获取页面元素的属性

step16: 获取页面的CSS属性值

step17: 情况输入框中的内容

step18: 在输入框中输入指定的内容

step19: 单击按钮

step20: 双击某个元素

step21: 操作单选下拉列表

step22: 断言单选列表选项值

step23: 操作多选的选择列表

step24: 操作可以输入的下拉列表

正式步骤:


  测试使用的unittest框架代码如下:

  

# -*-  coding:utf-8 -*-
from selenium import webdriver
import unittest class WebdriverAPI(unittest.TestCase):
def setUp(self):
# 每个用例都执行,在单个用例运行前执行
#打开浏览器
self.driver = webdriver.Chrome() def tearDown(self):
#每个用例都执行,在单个用例运行后执行
#退出浏览器
self.driver.quit() def test_visitURL(self):
#测试步骤
pass if __name__ == '__main__':
unittest.main()

step1: 访问一个网址

    def test_visitURL(self):
url = 'https://www.baidu.com/'
self.driver.get(url)
assert self.driver.title == '百度一下,你就知道'
print(self.driver.title)

step2: 网页的前进和后退

    def test_visitHistoryPage(self):
firstUrl = 'https://www.baidu.com/'
secondUrl = 'https://cn.bing.com/'
#访问第一个网址
self.driver.get(firstUrl)
time.sleep(2)
#访问第二个网址
self.driver.get(secondUrl)
time.sleep(2)
#回到百度网址
self.driver.back()
time.sleep(2)
#再回到bing
self.driver.forward()
time.sleep(2)

step3: 刷新当前页面

self.driver.refresh()

step4: 浏览器窗口最大化

        #窗口最大化
self.driver.maximize_window()

step5: 获取并设置当前窗口的位置

        #获取浏览器位置
position = self.driver.get_window_position()
#打印出浏览器的坐标
print('当前窗口x轴%s,y轴%s'%(position['x'],position['y']))
#设置浏览器的位置
self.driver.set_window_position(x = 100,y = 100)
time.sleep(2)

step6: 获取并设置当前窗口的大小

        #获取浏览器窗口大小
window_size = self.driver.get_window_size()
print('current size %s :'%window_size)
print('宽%s,高%s'%(window_size['width'],window_size['height']))
#重新设置窗口大小
self.driver.set_window_size(width=1000,height=1000)

step7: 获取页面的title属性值

        #获取并打印页面title
page_title = self.driver.title
print(page_title)
#断言页面title内容
self.assertEqual(page_title,'百度一下,你就知道1','页面属性值错误')

step8: 获取页面HTML源代码

        #获取页面的HTML源代码
page_source = self.driver.page_source
print(page_source)
#断言源码是否包含关键字百度,显然会有回显信息打印出来,正确则没有回显msg
self.assertTrue('百度#'in page_source,'不包含')

step9: 获取当前页面的URL

        #获取当前页面url
self.driver.get(firstUrl)
correntPageUrl = self.driver.current_url
print(correntPageUrl)

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

        #获取与切换浏览器窗口句柄
self.driver.get(firstUrl)
#获取当前窗口的句柄
firstHander = self.driver.current_window_handle
#打印获取的第一个窗口句柄
print(firstHander)
#输入框输入检索内容:selenium
self.driver.find_element_by_id('kw').send_keys('selenium3')
#单击搜索按钮
self.driver.find_element_by_id('su').click()
#设置等待时间3s
time.sleep(3)
#单击需要点击的网页链接
self.driver.find_element_by_partial_link_text('Python+Selenium3最新配置 - CSDN博客').click()
time.sleep(3)
#获取所有的句柄
allHander = self.driver.window_handles
print('当前窗口句柄:'+ allHander[-1])
#获取所有窗口句柄
for hander in allHander:
print(hander)
#将操作句柄切换到当前窗口
self.driver.switch_to.window(allHander[-1])
time.sleep(3)
#可以关闭当前窗口,不然关闭的是firstUrl
self.driver.close()
time.sleep(3)
print(firstHander)
self.driver.switch_to.window(firstHander)
self.driver.find_element_by_id('kw').clear()
time.sleep(2)

step11:获取页面元素的基本信息

        firstUrl = 'https://www.baidu.com/'
self.driver.get(firstUrl)
testElement = self.driver.find_element_by_xpath("//a[text()='新闻']")
print(testElement.tag_name,testElement.size)

step12: 获取页面元素的文本内容

        testElementText = self.driver.find_element_by_xpath("//a[text()='新闻']")
print(testElementText.text)

step13: 判断页面元素是否可见

        testElementVisiable = self.driver.find_element_by_xpath("//a[text()='新闻']")
print(testElementVisiable.is_displayed())

step14: 判断页面元素是否可操作,是否已选

        testElementVisiable = self.driver.find_element_by_xpath("//a[text()='新闻']")
print(testElementVisiable.is_displayed())
#判断页面元素是否可操作
print(testElementVisiable.is_enabled())

step15: 获取页面元素的属性

        #获取页面元素属性
attribution = testElementVisiable.get_attribute('class')
print(attribution)
attribution1 = testElementVisiable.get_attribute('name')
print(attribution1)
attribution2 = testElementVisiable.get_attribute('text')
print(attribution2)

step16: 获取页面的CSS属性值

        css_property = self.driver.find_element_by_xpath("//a[text()='新闻']")
print(css_property.value_of_css_property('height'))
print(css_property.value_of_css_property('width'))
print(css_property.value_of_css_property('font-size'))

step17: 清空输入框中的内容

        self.driver.find_element_by_id('kw').send_keys('test')
self.driver.find_element_by_id('kw').clear()

step18: 在输入框中输入指定的内容

self.driver.find_element_by_id('kw').send_keys('test')

step19: 单击按钮

self.driver.find_element_by_partial_link_text('Python+Selenium3最新配置 - CSDN博客').click()

step20: 双击某个元素

        input = self.driver.find_element_by_id('kw')
input.send_keys('双击全选,背景高亮')
from selenium.webdriver import ActionChains
action_chains = ActionChains(self.driver)
#双击后,高亮两个字背景高亮,只是为了证明双击起效了
action_chains.double_click(input).perform()
time.sleep(3)

step21: 操作单选下拉列表

测试用下拉html页面代码

<html>
<body>
<form>
<select name="cars">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
</form>
</body>
</html>

测试脚本:

        #操作简单的下拉列表
url = 'F:\\python_stack\\python_autotest\\webdriver_api\\xiala.html'
self.driver.get(url)
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(1)

step22: 断言单选列表选项值

        url = 'F:\\python_stack\\python_autotest\\webdriver_api\\xiala.html'
self.driver.get(url)
from selenium.webdriver.support.ui import Select
select_element = Select(self.driver.find_element_by_name('cars'))
current_options = select_element.options
current_optionsList = []
#遍历options,并生成option文本值的列表
for option in current_options:
print(option.text)
current_optionsList.append(option.text) print(current_optionsList)
expect_optionsList = ['Volvo','Saab','Fiat','Audi']
#断言两个列表是否相同
self.assertListEqual(current_optionsList,expect_optionsList)

step23: 操作多选的选择列表

        url = 'F:\\python_stack\\python_autotest\\webdriver_api\\xiala.html'
self.driver.get(url)
from selenium.webdriver.support.ui import Select
select_element = Select(self.driver.find_element_by_name('cars'))
select_element.select_by_index(0)
select_element.select_by_visible_text('Fiat')
select_element.select_by_value('audi')
time.sleep(3)
#取消选中的单位
select_element.deselect_all()
time.sleep(3)

step24: 操作可以输入的下拉列表

测试用HTML代码

<!DOCTYPE html>
<html>
<body>
<div style="position: relative;">
<input list="pasta" id = "select">
<datalist id ="pasta">
<option>C</option>
<option>Java</option>
<option>Python</option>
<option>C#</option>
<option>Ruby</option>
</datalist>
</div>
</body>
</html>

测试脚本:

        #带输入的下拉列表操作
url = 'F:\\python_stack\\python_autotest\\webdriver_api\\data.html'
self.driver.get(url)
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
self.driver.find_element_by_id("select").clear()
time.sleep(1)
#输入的同时向下按箭头
self.driver.find_element_by_id("select").send_keys("Java",Keys.ARROW_DOWN)
time.sleep(2)
self.driver.find_element_by_id("select").send_keys(Keys.ENTER)
time.sleep(2)

难点分析:


API看似简单,实际的简单应用中,还是花了很多时间去实际运行,眼高手低不好

学习总结:


还有24个常用API,下班后继续

参考资料:

参考英文官方资料:http://selenium-python.readthedocs.io/locating-elements.html

Python3 Selenium自动化web测试 ==> 第三节 常用WebDriver API使用示例上(24个API)的更多相关文章

  1. Python3 Selenium自动化web测试 ==> 第七节 WebDriver高级应用 -- 浮动框中,单击选择某个关键字选项

    学习目的: 了解WebDriver的高级应用 正式步骤: 测试Python3代码 # -*- coding:utf-8 -*- from selenium import webdriver from ...

  2. Python3 Selenium自动化web测试 ==> 第六节 WebDriver高级应用 -- 操作web页面的滚动条

    学习目的: 掌握页面元素定位以外的其他重要知识点. 正式步骤: 测试Python3代码 # -*- coding:utf-8 -*- from selenium import webdriver fr ...

  3. Python3 Selenium自动化web测试 ==> 第二节 页面元素的定位方法 <上>

    前置步骤: 上一篇的Python单元测试框架unittest,我认为相当于功能测试测试用例设计中的用例模板,在自动化用例的设计过程中,可以封装一个模板,在新建用例的时候,把需要测试的步骤添加上去即可: ...

  4. Python3 Selenium自动化web测试 ==> 第五节 WebDriver高级应用 -- 使用JavaScript操作页面元素

    学习目的: 中级水平技术提升 在WebDriver脚本代码中执行JS代码,可以解决某些 .click()方法无法生效等问题 正式步骤: Python3代码如下 # -*- coding:utf-8 - ...

  5. Python3 Selenium自动化web测试 ==> 第十一节 WebDriver高级应用 -- 显示等待 + 二次封装

    学习目的: 掌握显示等待 掌握二次封装 正式步骤: step1:显示等待的代码示例 # -*- coding:utf-8 -*- from selenium import webdriver from ...

  6. Python3 Selenium自动化web测试 ==> 第十节 WebDriver高级应用 -- xpath语法

    学习目的: xpath定位是针对常规定位方法中,最有效的定位方式. 场景: 页面元素的定位. 正式步骤: step1:常规属性 示例UI 示例UI相关HTML代码 相关代码示例: #通过id定位 dr ...

  7. Python3 Selenium自动化web测试 ==> 第一节 起始点之Python单元测试框架 unittest

    前置步骤 Python版本:3.6.4 selenium版本:3.11.0 >>> import selenium >>> help(selenium) IDE:P ...

  8. Python3 Selenium自动化web测试 ==> 第九节 WebDriver高级应用 -- 操作select 和 alert

    学习目的: 掌握页面常规元素的定位方法 场景: 网页正常的select元素下拉框常规方法和select专属方法 正式步骤: step1:常规思路select页面元素定位 处理HTML代码截图 # -* ...

  9. Python3 Selenium自动化web测试 ==>FAQ:Unittest测试报告生成文件名加测试完成时间字符串

    测试代码,虽然有点笨重,以后再修改: if __name__ == '__main__': report = os.path.join('D:/Python36/report/report.html' ...

随机推荐

  1. solr介绍

    solr架构图: 以下是Apache Solr的主要构建块(组件) 请求处理程序 - 发送到Apache Solr的请求由这些请求处理程序处理.请求可以是查询请求或索引更新请求.根据这些请示的要求来选 ...

  2. Python3之正则表达式详解

    正则表达式 本节我们看一下正则表达式的相关用法,正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检索.替换.匹配验证都不在话下. 当然对于爬虫来说,有了它,我们从HTM ...

  3. @Value和@ConfigurationProperties

    1.@Value用法 https://blog.csdn.net/u010832551/article/details/73826914 2.@ConfigurationProperties用法 ht ...

  4. Error from server (NotFound): the server could not find the requested resource (get services http:heapster:)

    kubectl top pod --all-namespaces Error from server (NotFound): the server could not find the request ...

  5. nodejs(上)(获取请求参数)

    Node.js是一个让JavaScript运行在服务器端的开发平台    参考文章 nodejs特点: 单线程 异步非阻塞i/o(异步相对节省资源,把那个等待的时间利用上了) 事件驱动 稳定性差(因为 ...

  6. C#与数据库有关的控件和属性

    BindingNavigator  数据记录导航 BindingSource 与数据源绑定, 常用属性:DataSource.DataMember 常用方法: DataGridView 以表格形式显示 ...

  7. jquery unbind()方法 语法

    jquery unbind()方法 语法 作用:unbind() 方法移除被选元素的事件处理程序.该方法能够移除所有的或被选的事件处理程序,或者当事件发生时终止指定函数的运行.ubind() 适用于任 ...

  8. [sdoi 2010][bzoj 1925]地精部落(神仙dp)

    Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...

  9. npm+cnpm+vuecli3打包相关

    1,npm install和cnpm install时的不同 https://blog.csdn.net/csm0912/article/details/90264026 2,npm设置和查看仓库源 ...

  10. TCP输入 之 快速路径和慢速路径

    概述 快速路径:用于处理预期的,理想情况下的数据段,在这种情况下,不会对一些边缘情形进行检测,进而达到快速处理的目的: 慢速路径:用于处理那些非预期的,非理想情况下的数据段,即不满足快速路径的情况下数 ...