ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Selenium图形界面自动化

2019-07-15 16:36:17  阅读:289  来源: 互联网

标签:xpath xxxx Selenium 图形界面 driver element 自动化 id find


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

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

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描述错误:如果开发人员修改代码,相对路径很可能发生变化。

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

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

标签:xpath,xxxx,Selenium,图形界面,driver,element,自动化,id,find
来源: https://blog.csdn.net/wbszg/article/details/95981526

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有