您的位置:首页 > 其它

windows 下安装和运行STF,已在win7和win10验证

2018-01-05 15:49 2551 查看
折腾了3天总算能在win7下跑stf了,记录一下大致过程

OS:Win7sp1, 已经在win10下安装成功

型号:华为PE-TL20

安卓4.4.2

首先是根据官网说明,npm install -g stf

由于需要二次开发,因此从github拉代码下来https://github.com/openstf/stf

先安装编译环境,再在代码目录执行 npm install,由于依赖包很多,强烈建议改用国内npm源,淘宝或者cnpmjs

安装编译环境

部分依赖包需要build,建议先 npm install windows-build-tools

部分包需要c++环境,建议安装 visual studio 2015,并指定编译器开关 npm config set msvs_version 2015

单独安装node-gyp,并根据花式报错信息,慢慢解决(这一步每台电脑不同,没有统一解决方案)

安装依赖包

以下这些依赖在windows下可能会坑,我这边是把package.json中相关项去掉后,另外npm install xxx自行安装的,

bcrypt
graceful-fs
jpeg-turbo
lodash.deburr
lodash.words


注意点:

jpeg-turbo一直编译不通过,做了以下两个事情,(stf官网说暂时不支持windows并建议自行研究解决,因此不确定其他人是不是可以用这个方法搞定)

官网https://libjpeg-turbo.org/,找到Official Binaries下载 libjpeg-turbo-1.5.3-gcc.exe并安装到目录A,然后找了一台成功安装了stf的mac机器,把stf的node_modules中的jpeg-turbo目录copy到windows下的stf的node_modules,然后把目录A中的文件覆盖到node_modules里。(玄学)

后来仔细看了这个包的错误日志,发现node-gyp编译过程中尝试寻找\lib\binding\node-v57-win32-x64\jpegturbo.node文件,当找不到这个文件时,尝试从这里下载

https://pre-gyp.s3.amazonaws.com/jpegturbo/v0.4.0/jpegturbo-v0.4.0-node-v57-win32-x64.tar.gz

但是一直下载失败。

解决方案是,下载node-jpeg-turbo源码自行编译, https://github.com/sorccu/node-jpeg-turbo

在\build\Release找到jpegturbo.node文件,copy到 stf下node_modules\jpeg-turbo\lib\binding\node-v57-win32-x64目录,文件夹不存在就自行创建

再安装编译jpeg-turbo,就可以编译通过了。

2018/1/11追加:

如果npm install报了gyp clean error,operation not permitted错误,尝试以下命令:

“C:\Program Files\nodejs\node.exe” “C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js” “rebuild”

即自行调用node-gyp进行编译,而不是通过npm调用

到这里应该已经完成stf安装和编译

运行STF并解决权限问题

cmd运行 stf local

遇到报错 minicap和minicap.so 没有权限运行,并无限循环,stf会清理环境和重试拷贝文件

根据官方github查询已经testhome等地方查询,应该是windows下编译的文件,copy到linux下没有赋予执行权限导致的

adb shell chmod 0755 /data/local/tmp/minicap 需要运行类似的命令

以下是解决过程:

参考这两个文章

https://www.cnblogs.com/kissfu/p/6344084.html

http://blog.csdn.net/kyotrue/article/details/78657578

从git拉minicap代码

git clone https://github.com/openstf/minicap.git –recursive

使用ndk-build工具编译

libs下是编译出的 minicap文件

参考上述链接,将libs\armeabi-v7a\minicap文件拷贝到安卓机器,例如

adb push libs\armeabi-v7a\minicap /data/local/tmp/minicap

回到stf\node_modules下,找到

minicap-prebuilt\prebuilt\armeabi-v7a\lib,根据安卓版本,找到对应的api-level文件夹,并将minicap.so拷贝到安卓机器,和minicap同目录

赋予权限 adb shell chmod 777 /data/local/tmp/minicap 和minicap.so (我这里暴力一点直接777了)

端口映射 adb forward tcp:1717 localabstract:minicap

到minicap代码目录,进入examples,执行npm install,遇到编译错误可以忽略掉,只需要express之类的网站组件安装好就可以

执行node app.js,访问http://localhost:9002/,这时候应该能看到手机屏幕的动态了

到这里,说明windows pc和手机,不存在兼容性问题,可以回到stf继续调试

回到STF,分析错误日志

Pushed minicap.so not executable, attempting fallback location

在stf代码目录中全局搜索,找到三个文件

minicap.js

miniref.js

minitouch.js

发现触发异常的原因是checkExecutable方法返回false,

原始代码是

return (stats.mode & fs.constants.S_IXUSR) === fs.constants.S_IXUSR


在之前加入打印代码,

log.info("stats.mode: %s, fs.constants.S_IXUSR: %s, fs.constants.S_IRWXU: %s", stats.mode,  fs.constants.S_IXUSR, fs.constants.S_IRWXU);
log.info("fs.constants: %s", JSON.stringify(fs.constants));


运行发现fs.constants.S_IXUSR为undefined,

根据nodejs文档

https://nodejs.org/api/fs.html#fs_fs_constants_1,S_IXUSR代表 File mode indicating executable by owner.

这里猜测是 windows环境导致S_IXUSR无法获取到,(因为mac下并没有这个鬼,linux没有试验)

最终解决方案,

为保证权限,将这三个文件中 mode: 0755修改为 mode: 0777,(实际是调用adbkit的push方法)

并将这三个文件的这行判断语句修改为

// return (stats.mode & fs.constants.S_IXUSR) === fs.constants.S_IXUSR
return (stats.mode & 33279) === 33279   // 100777


这里应该可以计算 100755的十进制数值,然后不用改mode

重启stf local,没有异常

访问localhost:7100

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐