学习 2020-11-3
104阅读2点赞0评论
本文以一个页面例子说明运行自动化脚本需要哪些步骤及实现过程中的报错汇总。
具体实现功能:登录操作、进入三级菜单、新建页面输入文本框值,输入时间,进入iframe,点击提交按钮
1. 首先需要导入模块名
有些功能selenium框架已经封装好了,只需要我们直接调用就好。
常用的导入功能:
from selenium import webdriver #导入webdriver驱动
from time import sleep #导入sleep函数
from selenium.webdriver.common.action_chains importActionChains #导入
ActionChains 函数
from selenium.webdriver.support.select import Select#导入select函数
webdriver驱动:通过webdriver驱动来调用浏览器
sleep函数:正常网页加载过程中,如果不通过时间等待再点击元素是无法定位到元素,从而报错,sleep函数是自动化过程中经常用到的功能
ActionChains函数:ActionChains是模拟鼠标事件的函数
2. 启动浏览器
所有的自动化操作都是基于页面打开的前提下,所以我们的首要步骤显示要启动浏览器。
在Selenium中可以启动任何浏览器,前提是需要下载相应的浏览器驱动这里以chrome浏览器为例,代码实现:
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. 功能实现
3.1 元素定位
刚接触自动化的同学可能都被元素定位搞的晕头转向。
元素定位有八大方式(id、tagname、class、xpath等等),到底使用哪一种呢
所有的元素定位方式我都用到了,还是不能定位到元素这到底是什么原因呢?
刚开始我也是这样,经过一段时间的摸索发现原来是这样~~
元素定位-id,id是唯一,通过id可定位任何元素
元素定位-xpath定位:其他定位方式都不会,只要会xpath就能搞定定位问题
定位不到:考虑时间、窗体、ifame等因素
3.2 元素方法
1).click()-单击(最常用)
driver.find_element_by_id('dlu').click()
2)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()#点击登录按钮
3)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)
4) iframe标签,这块属于自动化的重点及难点
driver.switch_to.frame('data_iframe')#进入标签
driver.switch_to.parent_frame() #跳回到上层标签
driver.switch_to.default_content()#退出标签
实现功能:三个 iframe 间切换操作
driver.switch_to.frame('data_iframe')#主页面窗体
driver.find_element_by_xpath('//*@id=\"grid\"]/div1]/a1]').click()
sleep(3)
# 第二个iframe填写内容新建
#下拉菜单非select类型,直接定位选择内容
iframe1 = driver.find_element_by_xpath('//*@title=\"新建页面\"]')
driver.switch_to.frame(iframe1) #新建页面标签
iframe2=driver.find_element_by_xpath(\"//iframecontains(@src,'/quality-web/certifischeController/input')]\")
driver.switch_to.frame(iframe2)#新建页嵌套标签
driver.find_element_by_xpath('//*@id=\"myform\"]/table/tbody/tr2]/td8]/span/span/span1]').click()
sleep(2)
driver.find_element_by_xpath(\"//*text()='2020财年当年4月']\").click()
sleep(2)
driver.find_element_by_xpath('//*@id=\"myform\"]/table/tbody/tr3]/td2]/span/span').click()
sleep(1)
driver.find_element_by_xpath(\"//*text()='111']\").click()
sleep(1)
#完成时间控件选择
js = \"$('.kendoDate').removeAttr('readonly')\" # jQuery,移除属性
# js = \"$('input:eq(0)').attr('readonly',false)\" # jQuery,设置为false
driver.execute_script(js)
sleep(2)
driver.find_element_by_xpath('//*@id=\"myform\"]/table/tbody/tr3]/td4]/span/span/input').send_keys(\"2020-06-22\")
#认证日期
driver.find_element_by_xpath('//*@id=\"mybody\"]/tr/td7]/span/span/input').send_keys('2020-06-22')
driver.find_element_by_xpath('//*@id=\"mybody\"]/tr/td8]/span/span/input').send_keys('2020-06-22')
#文本框输入
driver.find_element_by_xpath('//*@data-isq=\"工作项目\"]').send_keys(\"您好\")
sleep(1)
driver.find_element_by_xpath('//*@data-isq=\"详细计划\"]').send_keys(\"您好\")
sleep(1)
#
driver.find_element_by_xpath('//*@data-isq=\"供应商名称\"]').send_keys(\"您好\")
sleep(1)
driver.find_element_by_xpath('//*@data-isq=\"制造地址/邮编\"]').send_keys(\"您好\")
sleep(1)
driver.find_element_by_xpath('//*@data-isq=\"电话/传真\"]').send_keys(\"您好\")
sleep(1)
driver.find_element_by_xpath('//*@data-isq=\"认证产品\"]').send_keys(\"您好\")
sleep(1)
#树形结构
#批准人
driver.find_element_by_xpath('//*@data-isq=\"计划审核人\"]').click()
people=driver.find_element_by_xpath('//*@title=\"人员选择\"]')
driver.switch_to.frame(people) #进入选人 ifame