python selenium脚本_python+selenium实现web自动化脚本编写总结

selenium是免费、开源的,功能与IBM:RFT、HP:QTP相媲美,无浏览器限制:IE、Chrome、Firefox、safari等都可以使用,无操作系统限制:windows、macOs、linux都可以安装,支持多语言编程,可与其他工具集成:unittest、pytest、Junit、TestNG等。

一、环境搭建

1、安装python3.x版本

下载和安装python3.x版本,可以选择官网https://www.python.org/getit/ 下载最新版本,不再赘述。注意:勾选组建的时候,勾选安装python到path这个选项;win+R–cmd输入python可以看到版本号说明安装成功;

2、安装Selenium包

在线安装方式:Win+R—cmd输入python -m pip install selenium;在cmd输入python进入python环境,然后输入 from selenium import webdriver,不报错就代表selenium安装成功;

3、安装开发工具pyCharm

官网下载社区版,专业版收费,不再赘述;

4、安装浏览器驱动driver

以Chrome浏览器驱动为例,先查看自己浏览器版本,按照自己的版本下载相应的驱动,下载地址百度就行,官网打开较慢,下载后直接放到python安装路径或者将Chromedriver路径添加系统环境path变量中;

注意:浏览器版本升级后,需要重新下载对应版本的driver,可以配置浏览器不升级即可;

二、selenium WebDriver运行原理简介

客户端API(脚本)-------浏览器驱动-------浏览器

API和驱动是C/S架构,API发送http请求到驱动,驱动有一个port监听请求,驱动解析指令后发给浏览器,浏览器执行以后发送反馈

Webdriver使用协议:Json Wire protocol和通信数据格式:Json

三、元素定位方法

我们这里说的元素都是网页元素(web element),页面显示的对象,包括按钮、文字、输入框等都称为HTML页面元素,要操作网页元素首先要找到这个元素,selenium有八大元素定位方法:

find_element_by_id 通过id定位元素,id唯一

find_element_by_xpath 通过xpath定位,相对/绝对路径

find_element_by_name 元素本身属性的名称,可能会定位到多个值,默认返回第一个值

find_element_by_class_name 元素的css 类

find_element_by_tag_name 标签,不推荐,重复率太高

find_element_by_link_text 通过文本链接定位

find_element_by_partial_link_text 通过部分文本链接定位

find_element_by_css_selector css选择器

下面只介绍常用的几种方法:

1、find_element_by_xpath

比较常用,用法如下,以登录我们路由器的密码输入框为例,F12或者右键-检查,定位到当前元素,右键copy-copy xpath,将拷贝的路径添加到脚本:

89d9c242ba63b7bfa9e4434fbab3cf34.png

driver.find_element_by_xpath(’//*[@id=“kw”]’) # 相对路径

2、find_element_by_name/id

HTML页面:

97438728b27cb63891ca334145b3ec92.png

Selenium脚本:

driver.find_element_by_id(‘psd’).send_keys(‘admin’) # 输入登录密码admin

driver.find_element_by_name(‘psd’).send_keys(‘admin’)

四、等待处理方法

1、固定等待

time.sleep(2)

固定等待2秒,脚本调试中使用,不建议用到项目中,会影响代码执行效率;

2、隐式等待

implicitly_wait(8)

最多等待8s直到页面刷新出来,一次设置,全局生效,缺点:元素已找到,但未渲染出页面,导致找不到相应元素而出错;

3、显式等待

from selenium.webdriver.support.wait import WebDriverWait # 显示等待包

from selenium.webdriver.support import expected_conditions as EC # 期望事件包

wait = WebDriverWait(driver, 3)

wait.until(EC.alert_is_present())

设置显示等待时间,最长等待3s,默认0.5s轮询一次,直到出现alert弹框

注意:若显式等待和隐式等待时间均有设置,按最长的时间算;

五、鼠标键盘操作

from selenium.webdriver import ActionChains # 导入鼠标键盘事件

from selenium.webdriver.common.keys import Keys # 键盘鼠标事件辅助类

actionChains = ActionChains(driver) # 实例化

actionChains.send_keys(Keys.ARROW_DOWN).send_keys(Keys.ENTER).perform()

鼠标向下移动一行,点击确定,perform()方法表示执行前面一系列动作,不可少

element.send_keys(Keys.CONTROL + ‘a’) # 全选密码

time.sleep(2)

element.send_keys(Keys.BACKSPACE) # 删除密码

time.sleep(2)

element.send_keys(‘12345678’) # 修改密码

将原密码删除,并修改为新密码

其他的方法用到的时候再百度;

六、弹框处理

常见弹框:alert(提示框)、confirm(用来确认)、prompt(输入内容)

弹框的操作 :accept() 接受、dismiss() 取消、text() 显示弹框文本、send_keys() 弹框中输入内容

例如路由器本地升级页面的弹框为confirm类型:

c0e550979d2c286dd964b6b76d7a3701.png

#点击升级按钮

driver.find_element_by_class_name(‘pcsmallbutton’).click()

sleep(2)

#接受confirm套框,切换到当前alert

driver.switch_to.alert.accept()

八、PyCharm常用快捷键介绍

转换到前/后一次打开的脚本:Ctrl+Alt+左/右

注释多行:选中要注释的行,ctrl+/

段落缩进:选中要缩进的行,Tab

取消缩进:选中要缩进的行,shift+Tab

九、总结

上面简单介绍了selenium的基本用法,在实际业务中可能还会遇到其他问题,一般在网络上都能找到答案;如果要搭建自动化测试框架可以使用pytest测试框架,另外还有selenium IDE可以实现脚本录制功能,并可以直接导出为py脚本,目前支持Chrome和Firefox浏览器,记录日志的模块logging等,这些后面介绍;

已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页