Selenium图形界面自动化

1.环境搭建
1.1 主要学习资料:<<selenium高级自动化(图文教程)>>

1.2配套工具的版本号说明:
Windows7 64位
Python 2.7.12 + Selenium 2.53.6 + Chrome 63.0.3239.132 + ChromeDriver 2.34.522940
Pycharm Community Edition
ChromeDriver版本下载大全:http://chromedriver.storage.googleapis.com/index.html
Pycharm 官网:http://www.jetbrains.com/pycharm/
1.3软件安装:
1)Python安装:
官网下载地址:https://www.python.org/57
双击exe文件,傻瓜式安装,尽量不要安装在C盘,安装路径用英文;
安装成功后查看Python2.7.12/Scripts下是否有pip.exe和easy_install.exe文件(没有的话重新安装);
将Python2.7.12和Python2.7.12/Scripts添加到环境变量下,我的Python安装在
下,环境变量为D:\software\Python2.7.12;D:\software\Python2.7.12\Scripts;分号用英文;
双击计算机------左侧高级系统设置------右下方环境变量------双击系统变量中的Path------弹出编辑环境变量,如下图

2)Selenium安装:
打开cmd窗口,输入命令:pip ,显示如下则说明pip正常,如果不正常需要重复上面的步骤;
在这里插入图片描述

安装Selenium,输入命令行:pip install selenium==2.53.6
3)验证Selenium:cmd窗口输入如下指令

python
from selenium import webdriver
webdriver.Chrome()
在cmd中执行上面的命令后,启动谷歌浏览器,表示环境安装成功了
2.通用性框架
通过excel传参,表格如下:
url xxxx
user xxxx
pwd xxxx
servicetype xxxx
boardtype xxxx
usertag xxxx
layerrate xxxx
servicegrade xxxx
表格2.1

url xxxx
user xxxx
pwd xxxx
servicetype xxxx
boardtype xxxx
usertag xxxx
layerrate xxxx
adaptiontype xxxx
servicegrade xxxx
表格2.2

3.Python框架详细说明

3.1 框架说明:
Common.py:公共类方法
Readmyexcel.py:读表格中的参数,并将参数存为字典
test_service.py:定义业务类型的类
ServiceCreatDelete.py:业务建删的用例模板
FaOduCreatDelete.py:具体用例的模板,会引用业务建删模块
test_odu0_creat_delete.py:传参,主要通过参数的excel文件路径找到该文件,然后通过读字典的方式读参数
test_fa_odu0_creat_delete.py:同上,只是不同的用例

3.2 关于python:面向对象编程,使程序的维护和扩展变得更简单
以公共方法UmeCommon.py为例,做一下详细说明:
类:具有相同特征的一类事物
对象/实例:是关于类而实际存在的例子,即实例;作用是属性引用
实例化:类—>对象的过程
a 声明类及方法
类的继承:
初始化方法:可以用它来为每个实例定制自己的特征,实例化的过程就是在执行初始化方法__init__(),执行完__init__()后就会返回一个对象,这个对象存着这个类本身的属性和方法。
self:在实例化时自动将对象/实例本身传给__init__的第一个参数。
b 对象实例化
class Common(object):
u’’‘定义类’’’
def init(self):
u’’‘定义初始化方法’’’
self.driver = webdriver.Chrome()
pass
def Login(self,url,user,pwd):
u’’‘登录网址’’’
try:
self.driver.get(url) # 登录UME网址
time.sleep(5)
self.driver.maximize_window()
输入用户名 self.driver.find_element_by_xpath("//input[@id=‘inputUserName’]").click() self.driver.find_element_by_xpath("//input[@id=‘inputUserName’]").send_keys(user)
输入密码 self.driver.find_element_by_xpath("//input[@id=‘inputCiphercode’]").click() self.driver.find_element_by_xpath("//input[@id=‘inputCiphercode’]").send_keys(pwd)
点击确认按钮 self.driver.find_element_by_xpath("//button[@id=‘loginBut’]").click()
time.sleep(10)
logger.info(u"打开系统,登录页面成功!")
except Exception, msg:
logger.error(u"登录系统失败:\n"+str(msg))
return False

4.Selenium方法详细说明:

4.1 导入第三方库
from selenium import webdriver
import time,logging
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

当前脚本下要使用到的库要先导入进去,假如要导入Common这个类,就要from它的py文件名Common import 导入Common这个类:from Common import Common

4.2操作浏览器方法:

1)打开网址:
driver.get(“”)

2)窗口最大化:driver.maximize_window()

3)输入文本:
driver.find_element_by_xpath(“//*[@id=’inputUserName’]”).send_keys(u”admin”)

4)点击元素:driver.find_element_by_xpath(“//*[@id=’loginBut’]”).click()

5)Iframe转换:
iframe =
driver.find_element_by_xpath(“//div[@class=‘page-content-body’]/div/iframe”)
driver.switch_to.frame(iframe)

6)Select下拉框:restore = driver.find_element_by_xpath(“”)
restore.find_element_by_xpath(“//option[@value=’4’]”).click()

7)鼠标悬停并点击某元素:
mouse =
driver.find_element_by_xpath(“//span[@id=’ui_menu_i18n_key_umebn-service’]”)
ActionChains(driver).move_to_element(mouse).perform()

8)设置等待时间:
a设置休眠时间:time.sleep(30) 固定等待时间
b设置显示等待时间:使WebDriver等待某个条件成立时继续执行,否则在超出最大等待时间时抛出超时异常(TimeoutException),默认检测间隔的(步长)时间为0.5
element =
WebDriverWait(driver,5,0.5).until(driver.find_element_by_xpath(“”))
element.click()
c设置隐式等待时间:通过一定时长的等待页面上元素加载完成,如果超出了设置的时长,元素还未被加载,则抛出异常NoSuchElementException
driver.implicitly_wait(10)

9)退出浏览器:driver.quit() 会自动删除临时文件

10)关闭当前浏览器:driver.close() 不删除临时文件

4.3元素定位方法:

1)通过id属性定位元素:driver.find_element_by_id(“”)

2)通过name属性定位元素:driver.find_element_by_name(“”)

3)通过class属性定位元素:driver.find_element_by_class_name(“”)

4)通过tag(标签)属性定位元素:driver.find_element_by_tag_name(“”)

5)通过连接文本定位元素:driver.find_element_by_link_text(“”)

6)通过模糊匹配连接文本定位元素:driver.find_element_by_partial_link_text(“”)

7)通过CSS定位元素的方法:driver.find_element_by_css_selector(“”)

8)通过xpath定位元素的方法:driver.find_element_by_xpath(“”)
xpath定位元素方法中使用相对路径方法较多,获取相对路径方法,截图如下:
打开网址后,点击浏览器右上角的,选择更多工具------开发者工具,弹出页面后,

在页面的左上角点击图标,然后点击页面上要定位的位置,被定位的元素变蓝,在变蓝的位置,点击鼠标右键,选择copy------copy xpath,如UME登录界面的确定按钮的xpath://[@id=“loginBut”],点击确定按钮的方法:driver.find_element_by_xpath(“//[@id=/’loginbut
’]”).click(),

4.4定位不到元素的原因及解决办法:

1)动态id定位不到元素:由于id是动态的,每次都会变化,此时无法通过id准确定位到element,所以推荐使用xpath的相对路径方法查找到该元素;在对UME做界面自动化时,基本都是用的xpath的相对路径方法,也遇到过在xpath中相对路径用到动态id定位而找不到元素的情况,这时只要继续找它的父级、爷爷级,直到找到不是动态的就行。

2)iframe原因定位不到元素:由于需要定位的元素在另一个iframe里面,所以有时通过单独的id/name/xpath还是定位不到元素,此时可以先转换iframe到该元素所在的iframe;在实现的过程中,转换iframe时总是转换不过去,后来通过源代码中的可找到的一个元素,逐级定位到该iframe才转换成功。

3)xpath描述错误:如果开发人员修改代码,相对路径很可能发生变化。

4)点击速度过快:页面没有加载出来就点击页面上的元素,可以通过加等待时间来解决。

5.说明:
后续可根据用例继续完善方法、用例及参数,使用例的覆盖率更高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值