Selenium是一个用于Web应用程序测试的工具,很多时候可以拿来做自动化的功能,解放一些重复的事情,比如自动注册、登录、获取信息、处理报表等等,都是可以自己去设计一个流程即可,使用它,先从安装和配置开始!!

pip install Selenium

由于是用于web应用,需要下载浏览器不同版本对应的驱动(ChromeDriver),以Chrome为例,先查看版本: chrome://version/

Google Chrome    94.0.4606.71 (正式版本) (64 位) (cohort: Stable)

selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 89
Current browser version is 94.0.4606.71 with binary path C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

查看到我的Chrome版本是94.0.4606(中间默认就升级了),所以以前下载的 ChromeDriver版本就低了,需要下载对应的版本:
ChromeDriver Mirrorhttps://npm.taobao.org/mirrors/chromedriver/
或者使用Firefox浏览器:https://github.com/mozilla/geckodriver/releases

配置环境变量
比如: E:\MyChromeDriver, 把下载好的放进这个目录下
设置环境变量:系统变量–>Path,将“ E:\MyChromeDriver”目录添加到Path的值中即可

安装和配置好之后就可以使用它了,使用它最关键在于如何定位元素

定位一个元素

定位多个元素 说明
find_element_by_id find_elements_by_id 通过元素id定位
find_element_by_name find_elements_by_name 通过元素name定位
find_element_by_xpath find_elements_by_xpath 通过xpath表达式定位
find_element_by_link_text find_elements_by_link_text 通过完整超链接的文本定位
find_element_by_partial_link_text find_elements_by_partial_link_text 通过部分链接的文本定位
find_element_by_tag_name find_elements_by_tag_name 通过标签定位
find_element_by_class_name find_elements_by_class_name 通过类名进行定位
find_element_by_css_selector find_elements_by_css_selector 通过css选择器进行定位

例,通过自动打开百度,自定义搜索并分别点开链接查看文章

from selenium import webdriver
from time import sleepdef main():mydriver = 'E:\MyChromeDriver\chromedriver.exe'browser = webdriver.Chrome(executable_path = mydriver)browser.get('https://www.baidu.com')browser.set_window_size(1800,1200)browser.find_element_by_id("kw").send_keys("日本核污水")browser.find_element_by_id("su").click()sleep(2)#有时需要停留下,不然内容还没有出来,定位不到就报错#print(browser.title)#print(browser.find_element_by_class_name("nums_text").text)titles = browser.find_elements_by_xpath('//div/h3/a')for t in titles:print(t.text)ts=browser.find_element_by_link_text(t.text)ts.click()sleep(1)#print(browser.find_element_by_xpath("//span[@class='nums_text']").text)sleep(5)#browser.quit()if __name__ == '__main__':main()

如果是有框架的情况,需要进行切换才能定位,比如自动登录126邮箱

from selenium import webdriver
from time import sleepdef main():mydriver = 'E:\MyChromeDriver\chromedriver.exe'browser = webdriver.Chrome(executable_path = mydriver)browser.get('https://126.com')browser.set_window_size(1800,1200)sleep(2)xf = browser.find_element_by_xpath("//div[@id='loginDiv']/iframe")#由于iframe的id是动态的,所以先从它的上级元素来定位到本身browser.switch_to.frame(xf)browser.find_element_by_name("email").send_keys("tony")browser.find_element_by_name("password").send_keys("12345678")browser.find_element_by_id("dologin").click()browser.switch_to.default_content()sleep(5)#browser.quit()if __name__ == '__main__':main()

send_keys模拟键盘的一些示例

send_keys(Keys.BACK_SPACE) 删除键
send_keys(Keys.SPACE) 空格键
send_keys(Keys.TAB) 制表键
send_keys(Keys.ESCAPE) 回退键(Esc键)
send_keys(Keys.ENTER) 回车键
send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
send_keys(Keys.F1…Fn) 功能键 F1…Fn

另外有些网站禁止使用Selenium,可以通过js的window.navigator.webdriver来判断,如果是true就是代表通过Selenium在访问
熟悉js的可以使用下面这个来修改属性为false:

Object.defineProperties(navigator, {webdriver:{get:()=>false}});

不想让浏览器显示“chrome正受到自动测试软件的控制”信息,可以通过选项进行隐藏

option = webdriver.ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
browser = webdriver.Chrome(options=option)
browser.get('https://126.com')

如果是一些隐藏的标签或界面,这个时候可以模拟鼠标操作,比如百度的设置下面的搜索设置,就需要鼠标放上去再显示出来,下面设置每页20条的示例

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChainsdef main():option = webdriver.ChromeOptions()option.add_experimental_option('excludeSwitches', ['enable-automation'])#隐藏“chrome正受到自动测试软件的控制”browser = webdriver.Chrome(options=option)browser.get('https://www.baidu.com')browser.set_window_size(1800,1200)sleep(1)e1= browser.find_element_by_id("s-usersetting-top")#找到“设置”ActionChains(browser).move_to_element(e1).perform()#鼠标悬停在“设置”位置e2=browser.find_element_by_link_text("搜索设置")e2.click()sleep(1)e3=browser.find_element_by_id('nr_2')#每页20条的设置保存e3.click()e4=browser.find_element_by_class_name('prefpanelgo')e4.click()sleep(1)browser.switch_to.alert.accept()#接受提示框browser.find_element_by_id("kw").send_keys("日本核污水")browser.find_element_by_id("su").click()sleep(2)titles = browser.find_elements_by_xpath('//div/h3/a')for t in titles:print(t.text)ts=browser.find_element_by_link_text(t.text)ts.click()sleep(1)sleep(50)#browser.quit()if __name__ == '__main__':main()

对Cookies的操作

for cookie in browser.get_cookies():print('%s----%s' %(cookie['name'],cookie['value']))kv={'name':"MyName",'value':'Tony'}
browser.add_cookie(kv)#添加键值对
browser.delete_cookie('GUEST_LANGUAGE_ID')#删除这个键值
for cookie in browser.get_cookies():print('%s----%s' %(cookie['name'],cookie['value']))
browser.delete_all_cookies()#删除全部的cookies

对js脚本的执行操作

#执行js脚本,滚动条定位到x,y坐标位置
browser.execute_script("window.scrollTo(100,800);")
browser.execute_script("alert('你好,中国')")

截图操作

imgname=time.strftime("%Y%m%d%H%M%S", time.localtime())
browser.get_screenshot_as_file("D:\\"+imgname+".png")

Selenium 自动测试软件的使用(自动化操作)相关推荐

  1. 用Selenium自动化测试时,让ChromeDriver中不显示“正受到自动测试软件控制”

    背景: 在用Selenium做自动化测试的时候,默认ChromeDriver是会提示"Chrom正受到自动测试软件控制"的.如下图这样.但我们有些场景下,不希望这个提示出现.本文探 ...

  2. Python selenium 去掉“隐藏正受到自动测试软件的控制”

    以前使用selenium控制Chrome时,当出现"Chrome 正在受到自动软件的控制"信息栏的情况,会增加"disable-infobars"这个Chrom ...

  3. 解决“chrome正受到自动测试软件的控制”信息栏显示问题-V76及以上版本

    在使用Selenium WebDriver启动谷歌浏览器Chrome时,在新启动的浏览器地址栏下方经常会显示一行提示信息:"chrome正受到自动测试软件的控制",英文的就是&qu ...

  4. .Net软件测试指南 第一章 用.net自动测试软件

    为什么.NET可以用于测试? .NET Framework库有许多支持测试过程的功能. 1. 针对Service的功能与性能:有许多内部函数可以返回测试平台和被测试的应用程序的重要信息. 2. 针对U ...

  5. 解决“chrome正受到自动测试软件的控制”信息栏显示问题(转)

    在使用Selenium WebDriver启动谷歌浏览器Chrome时,在新启动的浏览器地址栏下方经常会显示一行提示信息:"chrome正受到自动测试软件的控制",英文的就是&qu ...

  6. 自动测试软件 需求,一种基于自动化需求分析软件的快速测试方法

    朱婷婷 摘要:概述软件测试目前的研究现状,根据测试工作常出现的问题,提出了基于自动化需求分析软件的快速测试方法.通过使用自动化需求分析软件,有效降低了需求分析阶段所需的人力和时间.通过历史类似项目软件 ...

  7. 安捷伦自动测试软件,安捷伦精干的测试工具

    [导读] 工欲善其事,必先利其器 从线缆到整个网络,您需要精干的测试工具! 在楼于建设.企业网.城域网领域,安装及维护人员会面临诸多的测试挑战:线缆/光缆的性能验证及故障排除,网络性能验证及故障诊断, ...

  8. 电脑接口自动测试软件,通过多种接口总线与计算机实现自动检定/校准测试系统的设计...

    2.1 多总线仪器硬件兼容的实现方案 如图2中VISA接口子层是实现仪器统一编程接口的核心.VISA详细规范了虚拟仪器I/O接口软件的组成.内部结构与实现规则,而符合此规范的虚拟仪器I/O接口函数就是 ...

  9. selenium入门超详细教程——网页自动化操作

    文章目录 简介 一.环境安装 1.selenium安装 2.安装浏览器驱动 2.1 确定浏览器版本 2.2 下载驱动 二.基础用法 1.对页面进行操作 1.1 初始化浏览器对象 1.2 访问页面 1. ...

最新文章

  1. error:CLEARTEXT communication to api.help.bj.cn not permitted by network security policy
  2. SAP Cloud for Customer客户主数据的重复检查-Levenshtein算法
  3. 声智科技完成2亿元B轮融资,将持续拓展语音交互产品的规模化落地
  4. php嵌入html还是html嵌入php,php嵌入html有哪几种方法
  5. 统计学习方法第十一章作业:随机条件场—概率计算问题、IIS/GD学习算法、维特比预测算法 代码实现
  6. jvm的发展历程:classic、exact、hotspot、BEA的JRockit、IBM的J9、 KVM和CDC/CLDC Hotspot、Azul VM、Liquid VM
  7. 81.游戏项目-物体任意角度飞行和停止
  8. 自己写一个实现ApplicationListener​接口并且把该组件加入到容器中
  9. linux耳机检测,Audio Jack 的耳机检测和按键检测
  10. html 中加号的表示方法,CSS的+(加号)选择器怎么用
  11. Mr.J-- jQuery学习笔记(十)--trigger方法详解
  12. Ajax 技术资源中心
  13. 高考志愿怎么填?BOSS直聘发布了一份填报指南
  14. 大学课程 | 《微机原理与接口技术》知识点总结
  15. #import 指令 (C++)
  16. wxml 判断 小程序_微信小程序WXML-小样儿960
  17. 带你读懂——频率响应与采样频率之间的关系
  18. [有机化学] 简单有机物的英文命名法
  19. OSChina 周四乱弹 ——程序员要赚多少钱才能让妻子保持温柔和美丽
  20. 电子制造企业如何避免仓库出货异常,导致客户大量退货?

热门文章

  1. 关于游戏网络设计的问题
  2. sso单点登录系统(解决session共享)
  3. 使用dva脚手架(dva-cli)快速构建React项目
  4. av_seek_frame() 定位为什么不准呢?
  5. 关于云主机拷贝复制资源异常的处理办法
  6. jQuery分析(3) - jQuery.fn.init
  7. 代码动态改变 NGUI UILabel 的字体
  8. Visual C++ 运行库合集
  9. 带参数的插入语句的问题
  10. 大数据_Flink_Java版_状态管理(2)_算子状态---Flink工作笔记0061