作者:桃子df
本文以一个页面例子说明运行自动化脚本需要哪些步骤及实现过程中的报错汇总
具体实现功能:
登录操作
进入三级菜单
新建页面输入文本框值,输入时间,进入iframe,点击提交按钮
一 自动化实现步骤
首先需要导入模块名
有些功能selenium框架已经封装好了,只需要我们直接调用就好
常用的导入功能
from selenium import webdriver #导入webdriver驱动
from time import sleep #导入sleep函数
from selenium.webdriver.common.action_chains import ActionChains #导入ActionChains 函数
from selenium.webdriver.support.select import Select#导入select函数
webdriver驱动:通过webdriver驱动来调用浏览器
sleep函数:正常网页加载过程中,如果不通过时间等待再点击元素是无法定位到元素,从而报错,sleep函数是自动化过程中经常用到的功能
ActionChains 函数:ActionChains 是模拟鼠标事件的函数
启动浏览器
所有的自动化操作都是基于页面打开的前提下,所以我们的首要步骤显示要启动浏览器。
在Selenium 中可以启动任何浏览器,前提是需要下载相应的浏览器驱动
这里以chrom浏览器为例
代码实现:
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("excludeSwitches", ['enable-automation'])
driver = webdriver.Chrome(options=chrome_options)
driver.get("http://127.0.0.1:8080/portal-web/framework/login?")
driver.maximize_window()
功能实现
3.1 元素定位
刚接触自动化的同学可能都被元素定位搞的晕头转向
元素定位有八大方式(id、tagname、class、xpath等等),到底使用哪一种呢
所有的元素定位方式我都用到了,还是不能定位到元素这到底是什么原因呢
刚开始我也是这样,经过一段时间的摸索发现原来是这样~~
元素定位-id,id是唯一,通过id可定位任何元素
元素定位-xpath定位:其他定位方式都不会,只要会xpath就能搞定定位问题
定位不到:考虑时间、窗体、ifame等因素
3.2 元素方法
click()-单击(最常用)
driver.find_element_by_id('dlu').click()
send_keys 文本框输入内容
driver.find_element_by_id('password').send_keys('11qq!!')
实现功能:登录功能
driver.find_element_by_name("username").send_keys('b')#定位用户名,输入值
driver.find_element_by_id('password').send_keys('11qq!!')#定位密码,输入值
driver.find_element_by_id('dlu').click()#点击登录按钮
double_click 双击
ActionChains(driver).double_click(ul1).perform()
实现功能:双击进入三级菜单
ul1=driver.find_element_by_xpath("//*[text()='质量基础']")
ActionChains(driver).double_click(ul1).perform()#双击一级菜单
ul2=driver.find_element_by_xpath("//*[text()='供应商产品质量维持认证']")
ActionChains(driver).double_click(ul2).perform()#双击二级菜单
ul3=driver.find_element_by_xpath("//*[text()='供应商产品质量维持认证计划']")
ActionChains(driver).double_click(ul3).perform()#双击三级菜单
sleep(3)
iframe 标签,这块属于自动化的重点及难点
driver.switch_to.frame('data_iframe')#进入标签
driver.switch_to.parent_frame() #跳回到上层标签
driver.switch_to.default_content()#退出标签
实现功能:三个iframe间切换操作
时间控件
时间控件正常操作是点击并选择时间
自动化input标签由于readonly 属性,所以日期控件是不允许输入的,那么我们主要通过js来删除或者readonly制成否,这样可以直接允许输入。
js = "$('.kendoDate').removeAttr('readonly')" # jQuery,移除属性
driver.execute_script(js) #执行js脚本
实现功能
js = "$('.kendoDate').removeAttr('readonly')" # jQuery,移除属性
driver.execute_script(js)
sleep(2)
driver.find_element_by_xpath('//*[@id="myform"]/table/tbody/tr[3]/td[4]/span/span/input').send_keys("2020-06-22")#输入固定日期
#认证日期
driver.find_element_by_xpath('//*[@id="mybody"]/tr/td[7]/span/span/input').send_keys('2020-06-22')
driver.find_element_by_xpath('//*[@id="mybody"]/tr/td[8]/span/span/input').send_keys('2020-06-22')
6.键盘操作
driver.find_element_by_class().send_keys(Keys.CONTROL+'a')
执行完操作后关闭浏览器
driver.quit()
二 报错处理方案
pycharm 引入包报错,选中模块名称【右键】->【mark directory as 】->【sources root】
图片: https://uploader.shimo.im/f/D7sNMzDamhfHgqfK.png
pycharm 中如何调节字体大小位置
菜单栏:file ----> setting —> editor —>font —> size 修改为需要大小字号例如20,点击ok
消息弹窗3秒消失,无法定位弹窗元素
图片: https://uploader.shimo.im/f/RxYyHIxSuUIx2CqF.png
打开F12,在source里面点击暂停脚本执行,把元素定住,然后再去写xpath定位
测试报告点击浏览器打开提示“系统找不到文件chrome”
出现该报错主要是因为你没有进行chrome浏览器安装路径的配置,解决方法很简单:
打开pycharm–》File–》setting–》Tools–》Web Browsers
在Default Browser一栏勾选Custom Path(敲黑板)
然后将chrome的路径改为安装路径即可,如图所示:
图片: https://uploader.shimo.im/f/6aOlR1ChJEHFMelE.png
运行脚本,提示chrome正在受到自控软件控制-属于chrome浏览器特有的问题
首先查看浏览器版本 75版本以下 :
option = webdriver.ChromeOptions()
option.add_argument('disable-infobars')
driver = webdriver.Chrome(chrome_options=option)
url=''
driver.get(url)
————————————————
75版以上
chrome_options = webdriver.ChromeOptions();
chrome_options.add_experimental_option("excludeSwitches", ['enable-automation']);
driver = webdriver.Chrome(options=chrome_options);