这个项目放到论坛之后,有很多热心的小伙伴试用,并且在 github 上面也点赞和 fork。 感谢各位的支持!
不过可能大家使用习惯的问题, 遇到有什么问题,或者看到我在下面的回帖里回复了 qq 号, 就直接加了 qq 进行咨询。由于工作等方面的原因,不可能实时在 qq 上进行回复,并且不少问题都是帖子和回复贴里有的,所以感觉沟通效率不高。
因此,现在暂时屏蔽 qq 号,如果对于该项目有任何使用上的疑问,欢迎通过下面的方式进行反馈:
github 地址: https://github.com/jerrylizilong/autotest_platform \ https://jerrylizilong.github.io/autotest_platform/
参考帖子:
之前使用 Python + flask 开发的 selenium 自动化测试用例管理、执行平台,终于克服懒癌把业务相关的信息剥离掉,代码放到了 GitHub 上面:
执行效果:
执行单条用例:
执行用例集:
基于 python+selenium 的自动化测试管理、执行平台。
python 3.4 以上
selenium : 建议使用 3.0 以上版本
mysql : 建议 5.5 以上
基于 flask 进行开发,进行用例、用例集、步骤等的增删改查等功能。
启动 flask:
python run.py
python core.py
python atx_core.py
# atx 配置
isUseATX=True # True 代表使用 atx
ATXHost = 'http://172.16.100.168:8002' # 对应的 atxserver 地址
git clone https://github.com/jerrylizilong/autotest_platform.git
cd autotest_platform
pip3 install -r requirements.txt
db_host='localhost'
db_port='3306'
db_user='root'
db_password='yourpassword'
database='test_auto_new'
# smtp 发送邮件相关配置:
is_email_enable = False #发送邮件开关
flask_host = 'http://localhost:5000' # 邮件中的报告链接会使用
smtp_server_host = 'smtp.163.com' # 如使用其他的smtp 服务,请修改对应host 和端口
smtp_server_port = '25'
smtp_from_email = 'youraccount@163.com' # 发送邮件的邮箱账号
smtp_default_to_email = 'youraccount@163.com' # 默认接收邮件的邮箱账号
smtp_server_user = smtp_from_email
smtp_server_password = 'yourpassword' # 发送邮件的邮箱密码
# atx 配置
isUseATX=True
ATXHost = 'http://localhost:8000'
python run.py
此时可通过访问 localhost:5000 访问登录界面。
初始用户及密码: admin/0
python core.py
python atx_core.py
# atx 配置
isUseATX=True # True 代表使用 atx
ATXHost = 'http://172.16.100.168:8002' # 对应的 atxserver 地址
可以按以下两种方式进行接入:
服务端启动:
python run_service.py
将通过 9998 端口监听节点启动、关闭状态
selenium grid 节点启动: 将 app/client 目录复制到已安装 selenium driver 的服务器/PC 中,修改 client.py 文件中 host 为服务端对应地址,并启动:
python client.py
服务启动后,会启动 selenium server,并注册到服务器中。
拉取相关镜像:
docker pull selenium/hub
docker pull selenium/node-chrome
docker pull selenium/node-firefox
启动 hub :
docker network create grid
docker run -d -p 4444:4444 --net grid --name selenium-hub selenium/hu
启动节点:
# 建议 NODE_MAX_INSTANCES、NODE_MAX_SESSION 两个参数都设置为 10,便于并发执行
docker run -e NODE_MAX_INSTANCES=10 -e NODE_MAX_SESSION=10 -d --net grid -e HUB_HOST=selenium-hub selenium/node-firefox
docker run -e NODE_MAX_INSTANCES=10 -e NODE_MAX_SESSION=10 -d --net grid -e HUB_HOST=selenium-hub selenium/node-chrome
用例步骤说明:
例子:在百度中输入 selenium,并验证查询结果是否正确。
Chrome,前往|http://www.baidu.com,填写|id@@kw@@selenium,点击|id@@su,验证|Web Browser Automation,截图
步骤解析:
- Chrome: 调用 Chrome driver 进行测试。
- 前往|http://www.baidu.com : 前往目标页。
- 填写|id@@kw@@selenium : 在 id 为 kw 的元素中输入 selenium。
- 点击|id@@su : 点击 id 为 su 的元素。
- 验证|Web Browser Automation : 验证页面中是否出现 ‘Web Browser Automation’ 的文字。
- 截图: 对当前页面进行截图并保存。
某些公共的步骤,可以封装为公共方法进行调用:
还可对用例进行如下管理:
请查看这篇文章的介绍:
https://testerhome.com/topics/11738
样例:
Android|com.your.packagename,点击 |id@@com.your.packagename:id/btn_login,等待 |2,点击 |name@@GuestLogin,等待 |5,截图,
相关的步骤已封装在 app/core/atx_step.py 中,具体包括:
Android : 打开指定已安装的 app(通过包名)
填写: type_text
点击: click(by id/name/description/class)
截图: take_screenshot
由于我测试的 app 功能较为简单,目前只封装了这几个方法,如果需要可增加封装对应的方法。
这个功能有助于提高用例的输入效率。 如下图示是如何添加一条《在百度搜索 testerhome 并截图》的例子:
脑图集成部分代码已提交:
https://github.com/jerrylizilong/autotest_platform
更新说明:
使用说明:
脑图管理
编辑脑图
这个可以有,支持另外开发者上传代码吗
学习了,后期可以将 macaca appium atx 等兼容进来
我这边已经集成了 appium 和 atx(之前集成的 macaca ,因为感觉不稳定,替换成了 appium 和 atx),不过这次整理的代码里没包括这块
想问下,存储在数据库中的关键字和对应的值是如何转化为可执行的测试用例的,例如 appium 所能执行的,看了下源码没太懂,代码能力较菜
读取关键字对应值:
调用:
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"])
问下哈,这边在本地部署好了,添加了测试用例,但是点击执行后就弹出提示,然后显示待执行是什么情况
请查看这篇文章的介绍:
https://testerhome.com/topics/11738
样例:
Android|com.your.packagename,点击 |id@@com.your.packagename:id/btn_login,等待 |2,点击 |name@@GuestLogin,等待 |5,截图,
相关的步骤已封装在 app/core/atx_step.py 中,具体包括:
Android : 打开指定已安装的 app(通过包名)
填写: type_text
点击: click(by id/name/description/class)
截图: take_screenshot
由于我测试的 app 功能较为简单,目前只封装了这几个方法,如果需要可增加封装对应的方法。
已经很不错了,想知道下,执行任务那块是怎么做的呢,多线程吗??
思路不错,有时间研究下重构下
请问下,已经运行了 run.py&coreserver.py 两个文件,但是运行的时候直接弹层提示了 success,但是显示 3-无法执行,请问这个是什么情况呢?
还有就是请问下,因为用的是 docker 里的 selenium&Chrome,请问下添加节点里的 ip 和端口是填写 selenium 的还是 Chrome 的 ip 呢
已经在节点管理中添加了 ip 和端口,但是运行用例之后会提示这个-ERROR: no hubs is availabe!
no hubs is availabe 就是没有可用的节点
你看下是否已经启动了对应的 selenium server , 并添加到 节点管理里面。
已经在 docker 中启动了 selenium-hub 还有 Chrome,而且把节点添加到了节点管理中,但是每次启动都是这个一样的报错
需要填写的是 selenium 的 ip 和端口, 实际上就是通过类似的 selenium server 地址进行测试: http://XXX.XXX.XXX.XX:4444/grid/console
另外需要留意下 docker 里的 selenium 能否被你的脚本访问
http://xxx.xxx.xxx.xx:4444/grid/console 看下你配的节点在部署的服务器上能否正常访问。 如果访问不了,服务器会认为这个节点已经关闭了,从而更新为已关闭。
如果是 docker 的, 看下如何开启 docker 容器的网络权限到外网访问。
看下你本地的 app/core/buildCase.py 文件第 29 行是否有修改过? 你的代码和我 GitHub 上的不一致:
github 上的代码:
你截图的代码:
这是因为这个进程已经被占用掉了。
建议启动 docker 的时候把最大进程设置为 10, 这样可以并发执行,提高使用率:
sudo docker run -e NODE_MAX_INSTANCES=10 -e NODE_MAX_SESSION=10 -d --net grid -e HUB_HOST=selenium-hub -v /dev/shm:/dev/shm selenium/node-firefox-debug
萌新请教一下,为啥我启动 selenium 服务的时候,会报错。。
你是在 ide 里运行吗?
这应该是 python 的模块没有识别到,可以这样做:
方法 1: 直接在 ide(如 pycharm)里运行, 它会自动把当前目录加入到 pythonpath 里面进行识别
方法 2: 在 app 同级,新增一个 py 文件:
from app.core import coreservice
coreservice.coreservice()
然后直接运行这个文件,应该就没有这个问题
大神,报这个错是啥意思?
截图看得不是很清晰,最好拿具体的错误信息去搜一下。
看起来应该是你的 selenium server 版本不兼容。
selenium server 版本
你的 selenium 节点是怎么启动的? java -jar selenium.xxx.jar 这种方式吗? 看下这个 jar 包是什么版本的
为什么执行用例的时候,只提示 sucess,然后并没有启动浏览器执行用例?
1、启动 core service 的时候提示 Process finished with exit code -1073741819 (0xC0000005) 不知道什么问题;
2、启动了这三个文件 run.py 、service.py 、client.py,算不算启动了可用的 selenium 节点?
把你的 core service 报错截图来看看?
另外说明一下几个文件的启动顺序:
python client.py 提示错误: other system is not supported yet !
大佬,这个问题咋整~
已经解决了,谢谢楼主!ChromeDriver 没有被检测到
修改 coredriver.py 的
driver = webdriver.remote.webdriver.WebDriver(command_executor=server_url,desired_capabilities=desired_caps_web) 为 driver = webdriver.Chrome()
我一直想做一个这平台,但一想到做,就觉得 HTML,js,css 基础不好,搞不定
作者您好。请问运行命令 python run.py 后登陆页面会提示请求出错是什么原因?
android 用例执行失败:
感谢大神,空闲时间帮忙指导一下。
应该是通用的格式啊,不过 android 我用的不多,所以对应的关键字封装的目前只有 点击、填写、截图、等待 等几个
出错的是 点击文字 , 这个方法我在 android 下是没封装的,可以用 点击 |name@@XXX 来替代;
同时跑多个设备,需要先新建 测试用例集, 然后关联用例时选择需要执行的 设备列表, 然后再点击关联
楼主,打扰了。有 2 个问题想咨询下:
1、用例执行完,没有生成测试报告,也不可能发送邮件了,邮件配置如图
2、多个用例如何执行?是并发执行,还是按顺序执行呢?比如多个用例,前置操作都是登录,调用公共方法就 OK 吗
to 1. 只有测试用例集(自动化测试》test suite )执行完才会生成对应报告和发邮件, 否则每条用例执行都发一次邮件通知就太频繁了。
收到,感谢楼主。
1、在尝试进行公司管理后台的用例编写,但是很多点击方法都没有成功,最后采用 “前往” 才进入 ‘用户管理’ 页面。
2、列表信息中,操作菜单内的功能按钮,关键字方法中,没找到具体定位方法
我们的菜单也是类似这样的结构,我对应的解决方法是:
以上方案实在不行的话,可以考虑用 xpath 的相对路径定位。
哈,巧合了。我是使用 Java + springboot + Appium / Selenium,实现了一套类似功能的 UI 自动化测试平台。正在准备抽离业务代码做下开源分享,刚巧看到你的这篇帖子,学习一下。
2018-11-16 更新:
请问一下,点击登录之后
,报错误
数据表不存在,看下 init.sql 的数据是否已经导入到你的数据库里面
数据表不存在,看下 init.sql 的数据是否已经导入到你的数据库里面。
图片上传和弹出浮层的选择框用什么方法,我试了一下,好像都不能用
图片上传如果是 input 类型,可以试下 填写文件 方法
弹框的选择看是什么类型,如果是 select 也可以用 选择 方法
大神我想问一下,我想在您的平台里实现,读取页面中指定元素的文字并写入到一个文本框里,可以实现么,我试了试改步骤,总是不行
刚刚做了一个简单的实现,添加了一个复制方法:
复制: 将某个元素的内容(value、text、innertext)复制填写到另一个元素中。
刚刚已经提交到最新代码里了,可以更新下来看看。
insert into `test_keyword` ( `keyword`, `paraCount`, `template`, `elementTemplate`, `example`, `description`, `status`) values('复制','4','extend.extend().copy_from_another_element(driver,[\"$para1\",\"$para2\"],[\"$para3\",\"$para4\"])','driver.element_by_$para1(\"$para2\")','复制|id@@kw@@id@@su','将后一个元素的内容复制填入到前一个元素中','1');
更新后之前的用例为啥都不见了 而且跑 case 的时候提示 failed to change window state to normal, current state is maximized
搞定了大神,我把 mysql 重启了一下然后重新执行了一下 init.sql 就好了,但是我又发现一个问题,执行 init.sql 会覆盖 case 和节点数据吗?那我下次在更新的时候要怎么操作才能在不丢失数据的情况下升级,谢谢啦
init sql 是在初始化的时候才要做的,如果你已经初始化过,就不要轻易去执行了,否则可能把你原来的数据给清掉
可以对比下你的版本和最新的版本,看新增了什么 sql 语句需要执行的
楼主是怎么实现 web 端通过关键字编辑用例,然后在手机真机上运行的?卡在这里很久了,因为之前我是 C/S 结构
我是用的 atx server,通过 wifi 无线连接手机进行测试。
appnium 的话可以搜一下论坛里的帖子,之前看到有人分享过怎么进行管理
我发现使用填写文件的时候,会自动把\去掉。这个怎么解决。去掉了\导致了路径不正确
请问能同时运行多个任务么? 如果有不同的环境需要同时跑自动化,那么这些任务是怎么组织和分发?
所有的任务都是转换为单条测试用例进行管理的。
例如分别有 A、B、C 三个任务,分别有 100 条用例,那么定时任务就会查到有 300 条用例待执行,自动按设定的并发数(默认为 6 )并发执行。
init.sql 无法执行怎么办,好像是版本不支持
这个上传文件的还是搞不定啊。同样的一句上传文件。我单独放在一个 Python 文件里面就能执行成功,但是在你这个里面。文件就上传不了。不知道什么原因。 driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div/div[1]/div[2]/form/div[3]/div[2]/div/span/span/div[1]/span/input").send_keys("I:\3333.jpg")
就是这一句
我这边是没问题的,如果你本地用 selenium 可以执行,可以检查一下:
填写 方法就是按 driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div/div[1]/div[2]/form/div[3]/div[2]/div/span/span/div[1]/span/input").send_keys("I:\3333.jpg") 这种格式进行封装的,所以如果 selenium 直接运行 ok ,理论上这样调用也没问题
老哥,请教个问题
这个是你 test_case 的编辑,你可以通过用例 id 直接查找,然后跳转到 edit_test_cases2,而且有着数据
但是我自己也写了一个编辑,用着新的数据库,我也可以进行跳转,但是没有数据是什么原因?
从后台获取用例的完整信息,是在 js 里实现的
html 里的调用:
<script>window.onload =function(){document.getElementById('btn_reset').click();}</script>
对应的 js :
/static/scripts/core/test_case.js
// 编辑表单
function get_edit_info(active_id)
{
if(!active_id)
{
alert('Error!');
return false;
}
$.ajax(
{
url: "/test_case.json",
data:{"id":active_id,"type":"test_case"},
type: "get",
dataType:"json",
beforeSend:function()
{
return true;
},
success:function(data)
{
if(data)
{
// 解析json数据
var data = data;
var data_obj = data.rows
// 赋值
$("#id").val(active_id);
$("#name").val(data_obj.name);
$("#steps").val(data_obj.steps);
$("#description").val(data_obj.description);
$("#type").val(data_obj.isPublic);
var isPublic = data_obj.isPublic;
if(isPublic == 1)
{
$("#type").val('公共用例');
setModule('公共用例');
}else{
$("#type").val('普通用例');
setModule('普通用例');
}
$("#module").val(data_obj.module);
}
else
{
$("#tip").html("<span style='color:red'>失败,请重试</span>");
// alert('操作失败');
}
},
error:function()
{
alert('请求出错');
},
complete:function()
{
// $('#tips').hide();
}
});
return false;
}
刚开始就是模仿你的,js 文件里面就是将 test_case 换成了 test_app ,然后新建了一个新的数据库,其他没改动过,这应该调用成功了吧
改成 test_app,解决了,真的难受。。谷歌浏览器的缓存好坑,但是编辑里面的赋值还是没有解决,我只能找到 id,然后。。。然后就没有软后了
全部是用你的,我就是改了名字而已(里面的方法名也都改了),但就是不显示;我也查看了你 test_case 的搜索方法,但和你一样呀,你也只查询了 id 而已,但网页最后有数据。
js 里面的赋值应该没多大关系,我都是默认的,但用例名称也不显示
htm 的 reset 按钮有的,网页也和你一样,但是也没有数据,只有 id
一步步排查吧:
JS 打印日志过了,触发了
接口调用成功,debug 模式有 id 传进来
但问题就是只传了 id,我用了你原来的文件,讲道理 modle 和名称起码应该可以和 id 一起传进来,但现在都没有。
老哥,现在有空么,能帮我查看下么
楼主,各种弹框,页面,ifame 的切换,你这里怎么设计的?
都是封装 selenium 的方法处理,例如:
def switchIframe(self,driver,para_list):
method, value = para_list[0], para_list[1]
# 切换 iframe
if method=='css':
method = By.CSS_SELECTOR
driver.switch_to_frame(driver.find_element(by = method,value=value))
time.sleep(2)
def switchWindow(self,driver):
for name in driver.window_handles:
if name != driver.current_window_handle:
driver.switch_to.window(name)
time.sleep(2)
大神,想问下 这里面接口这部分是怎么操作的呢?
你好,想问一下单条测试用例可以运行,但是关联到测试集里就一直处于等待执行不知道是什么原因
请问答主用例的编写是没有采用 POM 模式吗?我看百度搜索的例子元素定位是直接写死在测试步骤中的,那如果我有 50 个案例均用到了同一个元素,后面元素定位信息改变了,那我是需要修改 50 个案例吗?
我还没有采用 POM 的模式,其实也可以做个增强,增加一个自定义对象的功能,把这种使用很多次的元素作为对象管理起来。
另一方面,如果你某些步骤是被多个用例使用到的,就有必要抽出来作为公共方法。
感谢楼主分享,前面都很顺利,selenium 节点也自动加载了但是却发现调不起 chromedrive,最后参考 64 楼的方法成功调用了
64 楼这种方式是把调用 selenium server 的驱动改为本地驱动了。
如果你是在本地执行用例的,可以使用这种修改方式; 如果你是想用 selenium server(即通过 jar 包启动的方式), 就要看下面这部分了:
麻烦问一下楼主如果我想去数据库断言数据正确性怎么处理的
我现在没有做这种处理。
思路应该是封装一个从数据库读取数据的方法,然后把获取到的数据和页面上需要的数据进行断言对比就可以了。
那我应该封装到那个文件里面,app/core/extend.py 这个?
老哥,我测试用例集跑完后没有生成测试报告,然后邮件发送成功,但是收不到。这是因为没有报告的原因吗?
“” 执行类型为 Chrome 时,不能关联 android 模块的用例, “” 否则无法执行!,我有些安卓用例需要在运营后台配置,这个限制在哪取消掉
这里的执行类似是指属于 web 的用例,还是属于 android 的用例。 因为对应具体的用例类型是不一样的(内部应用的驱动不一样,一个是 selenium ,一个是 uiautomator2 ),所以限制了不能混在同一个用例集里执行。
建议可以分开两个用例集,一个是 web 相关的用例,一个是 android 相关的用例。
楼主,我想问下。当用例集点击执行后,我观察代码是向数据库中 update 了一条数据。那么具体执行是从哪边,就是调用 selenium 执行的过程从哪边看到?小白一枚,希望楼主不吝赐教。
将数据库中的数据转成可执行的语句是哪边?谢谢楼主!
你看下 coreservice.py 文件的代码,其实是一个轮询,如果发现有待执行状态的用例或者用例集,就会开始执行;而界面上操作的 update,就是把用例集更新为待执行的状态。
具体执行 selenium 的方法,可以从 coreservice 方法开始跟踪,最后是由 process.py 里的 main 方法执行单条用例的
好的,谢啦老哥!
楼主,你好。我试了下这个测试平台觉得挺好的。但有两个问题想请教你一下。
1.添加用例集时提示请求出错,但用例集又添加了。请求是什么原因呢?
2.在用例集列表上直接点执行不会跑关联的用例。
下面是截图
楼主,你好。目前这个框架的用例好像没有部分执行功能也无法指定执行该用例的节点。请问是这样吗?如果是的话,请问方便加一下这两个功能吗?
1.在执行用例前可指定某些步骤不执行。
2.指定用例在某个特定的节点上执行,如果没有指定则随机选取一个可用的执行。
这种不是常规的需求吧,例如前几个步骤不执行,那流程还可以正常执行吗?
如果要这么做,把用例编辑一下,删掉不执行的步骤就可以了(效果和注释掉对应的代码一样)
至于指定节点,这个平台也是没有这个需求的,我的设计就是只要有可执行的节点就能执行。如果需要的话,要改对应查找节点的逻辑。
楼主你好,我想问下,那个接口管理是怎么使用的?我填了 url 进去一直是错误。
报错是因为你的接口里没有参数,也就是 ? 后面的参数列表
请参考 github 上对应的说明:
非常感谢楼主!另外,我想发红包感谢下,楼主能留个微信号吗?
楼主,这边进行安卓端自动化执行用例时报这个错,麻烦看下啥问题
你的设备都连到 atx server 了吗? 看下 自动化测试- 节点管理 - 查看 android 设备列表页面里是否有可用的设备:
atxserver2 的/api/v1/devices 没有 ip 的信息,需要用/api/v1/user/devices/${UDID}这个接口获取 atxAgentAddress 的地址信息 并且接口请求需要带上 token
method = SERVER2 就能获取到所有的有效设备了
/api/v1/devices 返回中只能拿到设备的 UDID 然后根据 UIDID 请求/api/v1/user/devices/${UDID} 拿到 atxAgentAddress 就能链接到设备了
老哥,我把项目部署到了服务器上,但是本地的 selenium 无法执行。我修改了本地的 client.py 中的地址,其他还有什么地方要修改的吗?
另外,那个分布式执行应该是怎么进行的?
update:2019-05-22
脑图集成部分代码已提交:
https://github.com/jerrylizilong/autotest_platform
分布式是由 selenium server 的 hub 和 node 方式实现的,只要把 selenium hub 配到 节点管理 里面,剩下的事情 selenium server 会自动完成:
就是我在这边配置了,但是本地运行 python client,py 的时候
客户端的 client.py 的地址需要修改吗?
老哥,这个 ip 填的是自己本地电脑的 ip 地址吗?
我把服务都启动了,但是还是显示
你的 service.py 在哪台机运行,就填那台机的 IP
如果都是本地,填 127.0.0.1
老哥,这边客户端的 client.py 文件中的这里填的是本机的 ip 还是服务器的 ip?
另外,4444 端口和 9998 端口分别是干啥的?为啥要先 isOpen() 本地的 4444 端口。
客户端和服务器端建立 TCP 连接时在 9998 端口上吗?
4444 端口是 selenium Server 是默认端口,client 和 service 是通过 9998 端口进行通信
老哥,那个 socket 通信终于连接了,但是还是有个坑,就是执行的问题。
我是把这个项目放到了服务器上,然后准备在页面上操作可以实现在本地客户端进行测试,但是我点击测试的时候,报了这个错误。为啥会不能进行测试呢?
本地还是启动不起来,报的是这个错误
你的 client.py 是怎么启动的啊,没有启动 selenium server 就自动退出了。
这个 client 要做的事情是:
你现在的情况,是第三步没起来,你看下是不是改了代码配置还是说没下载 client 目录对应的 jar 包。
xpath 定位格式应该怎么写呢,还有验证我写的第二个页面的文字,但是一直验证失败
xpath : 点击 |xpath@@value
验证: 第二个页面是什么意思?打开另外一个窗口吗? 是的话,要先 切换窗口
就是登陆成功之后页面的文字,图片或者按钮的文字验证不成功,文本的文字可以验证成功了;如果验证页面数据是不是和数据库数据一致该怎么验证呢?
接口的模块是没有请求方式么 post 和 get
默认是 post,需要的话自己看下如何修改吧
近期工作很忙,没时间维护这个项目,所以不推荐用接口测试这个模块,或者自己做二次开发吧
你好,我这边脑图有点问题,有空可以帮忙看一下?
能不能讲下单元测试怎么操作的呢,感谢
忍不住问下,Blueprint 这个有注册么,我想尝试着增加新的模块,但是一直提示 page not found!
楼主你好 如何把你这套搭建到服务器上?一直提示无法执行
还有
这一步不知道怎么搞
提个问题,xpath 无法使用类似//a[contains(@href,'地址')] 模糊搜索定位,这样会被逗号进行切割,导致定位失败!
您好,想请教下,为啥我这边跑用例的时候,chrome 只闪现了一下就关闭了?
在 pycharm 跑其他用例,用的是同一个 chromedriver,用例可以跑通,应该不是 chromedriver 版本的问题
你确认一下看看,提示的版本是 2.20,可能和我代码里提供的 selenium Server(3.11)版本不一致
selenium server 3.11 这个版本对应多少版本的 chromedriver 呢?
你好 想问下这个使用 flask 传参给 selenium selenium 可以实现持久化吗
楼主 请教一下 BootStrap-table 控件 默认不展示
某个字段 怎没实现
上面那个问题解决了 感谢回复,,这几天一直在试用这个 还有个问题想请教下 楼主 有没有尝试过 把这个发布出来 部署在 iis 上 去使用呢,我尝试部署 在 iis 上不成功 期待回复
我理解这是 Python 的服务,Windows 下直接启动就可以了,应该不需要使用到 IIS 吧?
您好,我登录后报这个错,不知道咋回事
执行 “UI 自动化测试用例整理举例 - 百度首页” 的几个用例之后,只会进百度首页 然后什么都不干 过会就关掉了 显示执行失败 截图全是百度首页
用命令行在 envs 环境内启动了 run.py 和 core.py 然后 java -jar 启动的 app/client 里面的 selenium service,自己下的新版本 3.141.59 chromedriver 也是去官网刚下的和版本对应的版本。。。
楼主 步骤生成器 有时就加载不出来关键字了
解决了 报类型错误 因为改代码时用了 中文的标点符号 还有个问题 脑图 不能 上传本地图片 想请教一下 脑图的源码 好像也不能上传本地图片
没用过上传图片的功能,你可以找 KittyMinder 的源码看一下,我只是把它集成到 flask 而已
上面上传不了图片 不影响其他的 上传不了 应该是要配置个 文件上传的路径 还不知道 往哪配 楼主有空 可以帮忙看看
有什么问题在这里问吧,我 QQ 号现在不用了
另外我刚换了工作,新公司没有用这个框架,所以我尽量回复你,但是没办法帮你调试或者开发新功能了
请问个问题,docker 下执行用例时,经常会有用例出现 WebDriverException: Message: Session [750685c9031b369275b84fd4f5569b9e] was terminated due to BROWSER_TIMEOUT 这种报错,有什么办法解决吗?
楼主,遇到弹窗,如何定位当前页面弹出窗口上的确认按钮,步骤加入切换后还需不需要填入参数了,我看你是有"$para1","$para2"] 两个参数要求,可是我填了定位的参数,每次到切换就出错了,就是无法点击到弹窗上的确认按钮
大佬你的框架哪里可以接入三方 api 的,公司项目现在登录有图形验证码校验的问题,我用百度 AIP ORC 识别的方法来通过验证。。现在想改下框架
建议你可以试下这么改:把识别的过程封装为一个关键字,然后在需要的时候调用这个方法进行识别。
具体怎么封装新的关键字,可以看下上面正文里的说明
楼主楼主,我点测试用例集页,用例集上那个执行,但是只发送了邮件,但是并没有执行测试用例,是本身就没功能吗? 如果把执行详情的重跑全部用例那个接口接到外面的执行上面,前端要改哪个文件,不是很懂前端
应该是没有重跑所有用例。
如果要改,你就把这个 执行 按钮绑定的方法,改成和详情页 重跑全部用例 按钮绑定的方法一样就可以了,具体的方法你可以右键属性查看;修改的话,应该是在 test_suite.js 这个文件里
大佬,昨天搭建了一下,用着很好,不过有个情况不知道怎么写,就是用例之前传递变量。比如我先获取了这个订单号,然后定位到搜索框想输入这个订单号。
还行问下,想知道的用例报错的详细信息,怎么看哈。就是堆栈报出来的错
大佬你好,刚开始使用您这套东西,关于如何启动 selenium 服务我没搞清楚,可以指导一下吗?红框部分我不知道应该如何操作!
想请教一下作者 怎么样可以一直测试 比如说挂到服务器上 执行一个小时 或者更久
请问一下楼主,我的脑图模块点击编辑内容后只能看到最上面的一行组件,其他功能都不显示,不知道该怎么办
请问节点突然无法使用了,pycharm 运行无法获取节点,但是如果用 cmd 命令行则节点可以启动,但显示的地址的无线局域网地址,而且用例依旧无法运行。而且 run 以后 ie 内核的浏览器可以访问地址,但 Chrome 的无法访问,不知道为啥一个周末就突然变成这样了,之前都没事
看一下是不是你电脑的 IP 地址换了?
Chrome 和 IE 访问的都是同一个 IP 地址和 URL 吗?
我怀疑是你的服务器端无法访问到你本地的 selenium server,所以提示 4444 is down.
建议你检查一下这块,比如网关,端口什么的是否有限制,或者直接从服务 Telnet 一下你本地的地址和端口看是否能通
楼主好 我遇到一个问题,启动 run.py 后 访问域名不是打开页面,而是把 html 文件给下载到本地了,路由都是正确的 就是没识别出 html。请教一下这是什么原因。
楼主好 我想问一下 公共模块怎么关联到测试集里
公共模块是作为用例的一部分嵌进去的。你可以写一条用例,然后调用公共用例,或者看一下公共用例是不是可以直接关联到用例集里面。
因为这个项目我已经两年多没有在用了,所以有些细节不是很记得了。
大佬。我不太懂代码, 我想问一下,新增时,我想新增几个模块。修改那个文件?
在 app/templates/uitest/test_case.html 文件,29 行这个 option 里面改成你要的名字,或者增加 option 就可以了
这个位置我修改来。 查询的时候可以看到加的那几个。 但是我在新增的时候选不到
博主帮我看看这是什么情况呀
麻烦博主了 好久了没解决
看起来是你用的 selenium 版本兼容性问题。 你先试试本地直接跑 selenium 是不是能跑起来? 就随便用 python 写个 selenium 的测试脚本,能调起浏览器和打开网页就基本上没问题了
301 个评论和这么多点赞: 这比那个 Java 写接口自动化的好很多了吧,居然没加精
为什么我执行成功了 也自动打开 chrome 了 状态却是执行失败
看你的截图,失败的是 验证 的那个步骤,也就是断言失败了。
你可以点开旁边的截图看看具体是什么问题,有可能是你用错了关键字
请问博主这四个是用什么镜像下载的:framework==0.1.0 get==2019.4.13 post==2019.4.13
request==2019.4.13,我这里下载失败了,不知道是不是因此导致用例集查看结果页面的这个错误:
博主,我部署不上 atxserver2,一直提示 wait-for-db.sh 文件有非法字符,web1 无法启动,这个能解决吗?如果不能的话,我安装 stf,你的项目代码要改吗?
博主,能不能帮我看看这个上传图片的用例为什么错了啊
这个为什么也错了啊
博主,能不能看看,执行一个弹窗类用例出错了
楼上的朋友们,这个项目我已经五年没维护了,所以你们如果遇到问题请尽量自己尝试解决和二次开发,恕我现在没办法帮到你们。 所以请慎重选择这个项目哈,抱歉!
采用 grid,怎样解决文件上传和下载的问题
感谢楼主的开源,后来为了应对公司的需求,在平台编辑的脚本,然后把脚本放到了用 java 实现的本地服务执行,就可以把自动化平台放到公网,本地起个客户端服务,就可以测试网页了,原本的模式自动化平台和 selenium-server 服务之间,不允许有内外网跳转的网络环境,就有所限制