摘要:概述是一款开源的自动化框架,模拟用户操作浏览器的行为,主要用于界面自动化浏览器兼容性测试。将浏览器原生的封装成,作为编程语言与浏览器通信的桥梁,从而达到操作浏览器的目的。
Selenium是一款开源的Web自动化框架,模拟用户操作浏览器的行为,主要用于界面自动化、浏览器兼容性测试。
优点:
1、跨平台,如:Windows、Linux 和 Mac等;
2、支持各种浏览器,如:Chrome、Firefox、Edge、IE、Opear等;
3、完全开源。
webdriver:
将浏览器原生的API封装成WebDriver API ,作为编程语言与浏览器通信的桥梁,从而达到操作浏览器的目的。
注:不同的浏览器,需要不同的webdriver,且webdriver的版本号与浏览器版本号需对应。
导包:
from selenium import webdriver
本文以Chrome浏览器为例
driver = webdriver.Chrome(executable_path="driver路径")
将webdriver放置路径添加环境变量:
环境变量添加步骤:桌面—>我的电脑—>属性—>高级系统设置—>环境变量—>系统变量找到path并选中—>点击编辑—>新建—>保存,如下步骤:
推荐:一般直接将对应浏览器版本的driver文件放置在在python的安装目录下,省去再次添加环境变量(本人常用方法)。
设置环境变量后,可不用再次指定driver路径:
driver = webdriver.Chrome()
driver.get("http://xxxx")
driver.maximize_window() # 浏览器最大化driver.minimize_window() # 浏览器最小化driver.set_window_size(1980,1080) # 指定浏览器大小
options = webdriver.ChromeOptions()options.add_argument("--headless") # 设置无界面driver=webdriver.Chrome(chrome_options=options)
close():关闭当前当前浏览器窗口
quit():关闭所有页面,即关闭浏览器
6、其它操作
前进:driver.forward()
后退:driver.back()
刷新:driver.refresh()
driver.find_element_by_id()driver.find_element_by_name()driver.find_element_by_css_selector()driver.find_element_by_tag_name()driver.find_element_by_class_name()driver.find_element_by_xpath()driver.find_element_by_link_text()driver.find_element_by_partial_link_text():模糊查询
注:查找多个元素:将上述定位方法中的element改为elements即可,如:driver.find_elements_by_name(),唯一属性id除外
**绝对路径:**以“/”表示,从HTML标签逐层向下寻找,如:/html/body/table/tbody/tr[2]/td[2]/div/div[2]/table[2]/thead/tr/th[1]
**相对路径:**以“//”表示,表示任意位置,依据给出的路径匹配节点
如://*[@id=“fileID”]
常用函数定位法:
使用contains方法,如:xpath=//input[contains(@id,‘abcd’)]
使用text()方法,如:xpath=//button[text()=‘保存’]
使用starts-with方法(同理还有:ends-with),多用于元素属性部分发生变化的情况,如:
# 如:id=abcd12312sdfsf342xpath=//input[starts-with(@id,"abcd")]
一个元素需要通过多个属性值定位,可以用“and”,如:
//span[@id="fileID" and @class="classname"]
常用的包含以下几种:
类选择:find_element_by_css_selector(".slg")
id选择:find_element_by_css_selector("#su")
标签选择:find_element_by_css_selector(“input”)
属性选择:find_element_by_css_selector("[name=‘kw’]")
层级关系:
find_element_by_css_selector(“span>input”)
find_element_by_css_selector(“form>input:nth-child(2)”) #查找form标签下第2个input元素
组合选择:find_element_by_css_selector(“form.fm>span>input.slg”)
其它方式:
find_element_by_css_selector("[class*=swait_lg]"),查找class属性包含“swait_lg”
find_element_by_css_selector("[class^=bba]"),以“bba”开头
find_element_by_css_selector("[class$=abb]"),以“abb”结尾
…
点击:click()
清除原有内容:clear()
输入值:send_keys()
获取内容:text
获取元素属性:get_attribute()
判断元素是否显示:is_displayed()
1、转移到弹窗:
ele = driver.switch_to.alertele.accept() # 接受ele.text # 获取弹窗内容ele.dismiss() # 退出或取消
2、页内焦点切换: driver.switch_to.frame(frame)
退出当前焦点窗口到原窗口:driver.switch_to.default_content()
3、多窗口切换:
driver.switch_to.window(name)handles=driver.window_handles()driver.switch_to.window(handles[-1])
selenium有3种等待方式:
1、强制等待
time.sleep(2)
2、显示等待(局部,针对某个元素)
WebdriverWait(driver,5,0.5).until(lambda driver:driver.find_element_by_xpath())
3、隐式等待(全局,可解决大部分的元素等待问题)
driver.implicitly_wait(20)
1.截取整个网页:
driver.get_screenshot_as_base64() # 保存的是base64的编码格式driver.save_screenshot("XX/XX.png") # 如果在alert之类的弹出对话框出现后截图,程序会抛出异常driver.get_screenshot_as_png() # 保存的是二进制数据,需要写成图片文件保存driver.get_screenshot_as_file("XX/XX.png") # 获取当前window的截图,截图成功返回True,出现IOError的时候返回False
2.截小图:
ele.screenshot()ele = driver.find_element_by_id("msg")ele.screenshot("./3.png")
常用工具:Actionchains、pymouse、pykeyboard、pyautogui
1.Actionchains常用鼠标操作:
单机:click()
双击:double_click()
移动到某个元素上:move_to_element
在某个元素上悬停:click_and_hold
将一个元素拖到另一个元素上:drag_and_drop
用法:
from selenium.webdriver.common.action_chains import ActionChainsActionChains(driver).context_click(driver.find_element_by_id("su")).perform()
注:鼠标的所有事件,必须使用perform()执行所有ActionChains中存储的行为
2.键盘操作:
from selenium.webdriver.common.keys import Keyssend_keys(Keys.ENTER) # 键盘的回车事件send_keys(Keys.BACKSPACE) # 删除,回退# 组合使用send_keys(Keys.CONTROL,"a") # 全选send_keys(Keys.CONTROL,"c") # 复制
用法:driver.execute_script(js代码)
修改只读属性,如:driver.execute_script("document.getElementById(/"su/").readOnly=0;")
移动到页面底部
driver.excute_script("window.scrollTo(0,document.body.scrollHeight)")
注:本文是本人工作中学习及使用到的selenium常用方法,如有错误之处欢迎指出
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/119611.html
摘要:当你使用时,你必须注意,如果匹配超过一个元素,只返回第一个元素。操作打开一个页面现在设置,这个在域名根目录下生效现在获取所有当前下可获得的查找元素以上是相关的基础内容,下一期更新使用页面对象模式的示例一起越来越好 今天想跟大家分享的是:关于selenium的自动化测试一些基础的东西 安装环境 1.Python环境安装完成后通过Windows命令提示符CMD输入python,查看是否安装...
摘要:不同目标的自动化测试有不同的测试工具,但是任何工具都无不例外的需要编程的过程,实现源代码,也可以称之为测试脚本。 写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出不穷,但是,能够在项目中持之以恒的实践自动化测试的团队,却依旧不是非常多。有的团队知道怎么做,做的还不够好;有的团队还正在探索和摸索怎么做,甚至还有一些多方面的技术上和非技术上的旧系统需要重构……...
摘要:安装的安装就不再科普,自行百度。运行这段代码,你会发现自动打开,并访问了百度,在输入框输入了,紧接着跳转到了搜索的结果页。 最近写项目的时候,用到了Selenium,一个 Web 端的自动化测试工具,直接运行在浏览器中,用来模拟用户操作。 Selenium 不仅仅可以用作自动化测试,还有很多种玩法,比如 Python 的爬虫,实现某商品的秒杀,甚至是页游外挂脚本,只要是基于浏览器操作,...
摘要:然而让虫师们垂涎的并不是以上的种种,而是其通过驱动浏览器获得的解析的能力。所以说这货在动态爬取方面简直是挂逼级别的存在,相较于手动分析更简单易用,节省分析打码时间。一旦设置了隐式等待时间,它的作用范围就是对象实例的整个生命周期。 selenium——自动化测试工具,专门为Web应用程序编写的一个验收测试工具,测试其兼容性,功能什么的。然而让虫师们垂涎的并不是以上的种种,而是其通过驱动浏...
阅读 909·2021-09-09 09:32
阅读 2848·2021-09-02 10:20
阅读 2683·2021-07-23 11:24
阅读 823·2019-08-30 15:54
阅读 3629·2019-08-30 15:54
阅读 1345·2019-08-30 11:02
阅读 2843·2019-08-26 17:40
阅读 1122·2019-08-26 13:55