同一个接口, post 和 get 得到的结果不一定是相同的(看接口具体的实现,有些接口, get 是返回 html 页面, post 是返回 json 结果), 所以要了解你测试的接口需要使用哪种方式。
读取关键字对应值:
调用:
keywords.keywords().getPara(keyword)
方法:
def getPara(self, keyword):
result = 0
log.log().logger.info(keyword)
sql = string.Template(
"select paraCount, template, elementTemplate from `test_keyword` where `keyword`= '$index' limit 1;")
sql = sql.substitute(index=keyword)
result = useDB.useDB().search(sql)
if len(result):
return result[0][0], result[0][1],result[0][2]
else:
return '','',''
转换为可执行语句:
调用:
conmod, element = self.convertToComend(template,paraCount,steps,elementTemplate)
通过对应的模板,传入对应参数后,转换为可执行命令。
转换有两种:
当步骤中描述:
填写 |id@@input_box@@ghw
转换为命令:
driver.find_element_by_id("input_box").send_keys("ghw")
def select(self,driver,para_list):
method, value, option_method, option_value = para_list[0],para_list[1],para_list[2],para_list[3]
from selenium.webdriver.support.select import Select
if option_method =='index':
comd = 'Select(driver.find_element_by_%s("%s")).select_by_%s(%s)' %(method,value,option_method,option_value)
else:
if option_method == 'text_part':
self.select_by_visible_text(driver.find_element(by=method,value=value),option_value)
else:
if option_method == 'text':
option_method = 'visible_text'
comd = 'Select(driver.find_element_by_%s("%s")).select_by_%s("%s")' % (
method, value, option_method, option_value)
log.log().logger.info(comd)
exec(comd)
time.sleep(2)
模板:
extend.extend().select(driver,["$para1","$para2","$para3","$para4"])
步骤中描述:
选择 |id@@selectBox@@index@@1
extend.extend().select(driver,["id","selectBox","index","1"])
我这边已经集成了 appium 和 atx(之前集成的 macaca ,因为感觉不稳定,替换成了 appium 和 atx),不过这次整理的代码里没包括这块
欢迎提交到分支,合适的话我会抽空合并到主干
即使是黑盒测试,测试用例也是要从业务逻辑、异常用例等角度考虑不同的输入条件的,虽然不能覆盖 100% 的代码路径,但大部分分支也应该可以覆盖。
原来是被你的 return 给带歪了
对 java 代码不太熟悉, 不一定对:
按我的理解上面的代码等效于:
obj = rpc.getObj();
if(obj != null && obj.isSuccess()==true){
doTask1();
return;
}
else{
doOtherTasks();
}
如果这种情况, null 和 success 是 false 的情况不是都在 doOtherTasks 里处理了吗?
F12 看下控制台有没报错
markdown 就是一个页面编辑格式, 你编辑的时候可以看到有说明;
另外代码用 markdown 改一下吧, 这种代码格式大牛们是不屑于看的
干嘛要把 self 传进去?
看下你本地的 Firefox 浏览器和驱动是否已正确安装
前端是可以被跳过的
看论坛里有关 UI 自动化的讨论,认为性价比不高、收益不高的还是挺多
说下我现在在维护的这套工具吧:
开发阶段:
主要考虑以下方面:
后续不断使用过程中添加的优化:
先想想你为什么要做这样一个平台,要帮你解决什么问题。
开发一个系统,最重要的是你的使用需求
get_browser() 没有返回 driver 吧
试下 by class 或者 by text 来定位, 可能要比 css 稳定一些
网站前后端不分离是怎么实现的?
selenium 的 Select 模块了解下, 直接 select by index\value\text , 会方便很多
loginButton.click();
//页面刷新
driver.navigate().refresh();
是否点击完马上执行了下面的刷新,所以原来输入的用户名密码被重置为空了
建议先从一些能帮助你工作的地方入手,例如自动化测试、性能测试、接口测试,或者写个小脚本帮你造造数据,连接数据库查数等。
是指不在同一个 iframe 吗? 可以通过 switch to frame 来切换。