前言:自动化测试存在比较多的使用限制,会存在某段时间无法使用的生疏期。通过这篇文章记录项目编写程序中遇到的问题以及解决思路,希望对以后的自动化开发能有些帮助。
本篇记录5个问题:
问题1:如何激活pycharm
问题2. 搭建selenium + unittest开发环境
问题3:显示等待、隐式等待理解错误
问题4:格式化字符串方法
问题5:某一步页面无法响应,如何保证自动化程序能够继续运行,不受报错影响
问题1:如何激活pycharm:
网上找的攻略,想在已经激活了,但是忘了具体用的是那个版本的了,以后搭建环境的时候,再补充。
解决方法:找攻略
问题2. 搭建selenium + unittest开发环境:
解决方法:pycharm--file--setting--Project:Progrem--Project Interpreter
导入selenium包:创建成功后,再列表中会显示selenium。这样操作的只对你当前开发的包可用,每次新创建一个包,就需要重新引用下。
unittest是python中内置的框架,不需要导包,直接在需要使用的文件中,import unittest就可以了。至于unittest框架里有哪些内容,如何使用,网上有很多详细的说明,笔者自己还记得,就不细说了,如果使用中遇到什么问题,可以在评论中讨论。笔者看到一定会给出自己的理解建议。
问题3:显示等待、隐式等待理解错误:
解决方法:显示等待是在定位页面某个元素,这个元素没取到,就等待;取到了,就完成操作进入下一步;在配置的等待时间内还没渠道,则会抛出异常。隐式等待,等待的是整个页面完成加载。
显示等待效率要高于隐式等待。
显示等待的添加方法:
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
el = WebDriverWait(cls.driver, 10).until(EC.presence_of_element_located('class', 'test'))
问题4:格式化字符串方法:
解决方法:python字符串格式化有两种:
1. 使用% 例如:
'//*[@id="instances"]/tbody/tr[%s]/td[2]/b' % count
2. 使用.format 例如:
"{Key}:{url} 环境未启动".format(Key = Key, url = Value[0])
format方法可以通过位数来定位、也可以通过代码值进行对应 例如:print("{0:2d}{1:.3f}{site}".format(200, 3.1415, site = "gg"))
也可以直接进行转化: !a 转化为:ascii !s 转化为:str !r 转化为:repr
问题5:某一步页面无法响应,如何保证自动化程序能够继续运行,不受报错影响
解决方法:引入异常处理:try except else finally
1. 首先需要知道哪一步操作会出现error。 将这一步写入到try中
2. 然后确认error内容。except 中记录这个error类型、同时需要在文件中引入error类型
3. 最后进行异常处理。出现异常之后系统进行什么操作,保证能够继续运行。可以是数据处理或者下一步操作等
from selenium.common.exceptions import InvalidArgumentException # 运入报错error类型 try: # 将可能发生错误内容,写入try中 uihandle.get(Value[0]) sleep(2) # 获取登陆页面的Title信息 Server_Title = driver.title # 获取的Title与config中的title比较,如果不同,则说明页面没启动 if Server_Title == Value[1]: # print("{Key}:{url} 已经启动".format(Key = Key, url = Value[0])) self.TestReport['Total_Success'] += 1 else: print('*' * 50) print("{Key}:{url} 环境未启动".format(Key=Key, url=Value[0])) self.TestReport['Total_Failures'] += 1 self.TestReport["Error_Report"].append("""{Key}:{url} 该地址未完成启动 """.format(Key=Key, url=Value[0])) except InvalidArgumentException: # 填写error类型,系统捕捉到错误后不再停止,而是执行except中的程序 self.TestReport["Error_Report"].append("""{Key}:{url} 该地址无法访问 """.format(Key=Key, url=Value[0])) self.TestReport['Total_Failures'] += 1 finally: # 执行完try、except后,最后两者都需要执行的内容,写入finally driver.quit()