phantomjs 执行js文件执行文件在哪

PhantomJs 263++,定位不到元素的问题,不知道有没有同学遇到过,借网上有位朋友的提问如下,跟我的问题一样:
框架:Selenium+Java+testNG+Jenkins
背景:Jenkins部署在了Linux环境,在自己本地的Windows环境跑测试程序都没问题问题描述:因为Linux环境不能执行exe,所以直接在服务器上安装了PhantomJS,代码中这样描写的:
DesiredCapabilities caps = new DesiredCapabilities();
((DesiredCapabilities)caps).setJavascriptEnabled(true);
((DesiredCapabilities)caps).setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,"/opt/env/phantomjs-2.1.1-linux-x86_64/bin/phantomjs");
driver = new PhantomJSDriver(caps);
但是上传到Git上再用Jenkins来Build的时候,报错了,提示说找不到元素:
[ERROR - T03:16:02.297Z] WebElementLocator - _handleLocateCommand - Element(s) NOT Found: GAVE UP. Search Stop Time: 4
phantomjs://platform/console++.js:263 in errororg.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.InvocationTargetE nested exception is java.lang.reflect.InvocationTargetException: nulljava.lang.reflect.InvocationTargetExceptionCaused by: org.openqa.selenium.NoSuchElementException: {"errorMessage":"Unable to find element with name 'login_userName'"}
大家有什么经验来判断这到底是哪里的问题吗?
附:我自己的排查方法
有时候在本机windows调试的时候,也会报这个错误,找到原因是ssl证书过期,选择忽略ssl错误
String [] phantomJsArgs = {"--ignore-ssl-errors=true","--ssl-protocol=tlsv1"};
dcaps.setCapability(
PhantomJSDriverService.PHANTOMJS_CLI_ARGS,
phantomJsArgs);
然而同样版本2.1.1的phantomJs,在centos上用Jenkins build的时候,还是会报这个错误,尝试显示等待一段时间,然而无效,不是元素加载慢的原因
用Chrome headLess替代phantomJs,其他的坑一堆,网上资料更少。
如果有朋友遇到过类似问题,分享下解决办法,感激感激
现在都用puppet了吧
phantomjs注定会被chrome headless吃掉,不建议继续使用
phantomjs在对ES6的支持上天生有坑,前端使用ES6的网站都不建议用phantomjs去跑。
看错误信息的话,楼主用的是name locator?建议楼主可以换下定位器试试,比如css locator或者xpath试试。
提示找不到元素除了真BUG或者locator真变更了以外,通常来说要么是元素还没有加载完成,要么就是URL都跳转都没有执行到。这种时候建议在错误的步骤之前截图排查(截图命令执行后,会在截图中渲染出页面)。
希望有能帮到你。
chrome headless +1
PhantomJS调试太麻烦了
我的违规帖子已经修改好了,麻烦帮我看看那里还有不对的地方。
好的谢谢,我用Chrome headless试试
额这个跟phantomJs有关系么
非常谢谢耐心的回答,xpath定位不到,换css可以,尝试等待了一段时间等元素加载完毕,但是button定位的到点击不了,比较奇怪
截图看不到什么异常,打算换Chrome Headless试试
后方可回复, 如果你还没有账号请点击这里 。
mactec (cctodd)
第 15559 位会员 /
共收到 7 条回复问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
phantomjs ,在linnux安装后,可以查看到版本信息却执行不了文件,
phantomjs --version ,显示:1.9.8
phantomjs hello.js , 却显示:Can't opne 'hello.js'
怎么解决这个问题,重装几次都是一样
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
欢迎大家来解答
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?phantomjs环境搭建已经执行
时间: 22:38:56
&&&& 阅读:99
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&1、下载phantomjs
http://phantomjs.org/
新建phantomjs.bat,记得改文件夹路径
里面内容为:
D:\java\phantomjs\phantomjs.exe D:\java\phantomjs\code\server.js 8080
3、新建server.js文件,放在code文件夹下,注意code文件夹也是新建的,下面是server.js内容
var page = require('webpage').create();
var server = require('webserver').create();
var sys = require('system');
var data = 'name=hacker&';
if(sys.args.length !== 2){
console.log('Usage: app.js &portnumber&');
phantom.exit(1);
var port = sys.args[1];
//输出到网页预览图片,地址:http://localhost/
/*service = server.listen(port,function(req, res){
var url=decodeURIComponent(req.url).substr(1);
res.statusCode = 200;
res.headers = {
'Cache': 'no-cache',
'Content-Type': 'text/charset=utf-8'
page.open(url,{ keepAlive: true }, function (s) {
var base64= page.renderBase64('png'),type=&data:image/base64,&
var img=&&img src='&+type+base64+&'&&
res.write(img);
res.close();
//输出base64字符串
service = server.listen(port,function(req, res){
var url=decodeURIComponent(req.url).substr(1);
res.statusCode = 200;
res.headers = {
'Cache': 'no-cache',
'Content-Type': 'text/charset=utf-8'
page.open(url,/*{ keepAlive: true }*/, function (s) {
var base64= page.renderBase64('png');
res.write(base64);
res.close();
4:访问地址
localhost:8080/
标签:&&&&&&&&&&&&&&&&&&
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!1.安装phantomjs
网上有很多。
2.执行官网上的示例代码
// Read the Phantom webpage '#intro' element text using jQuery and "includeJs"
"use strict";
var page = require('webpage').create();
page.onConsoleMessage = function(msg) {
console.log(msg);
page.open("http://phantomjs.org/", function(status) {
if (status === "success") {
page.includeJs("/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
page.evaluate(function() {
console.log("$(\".explanation\").text() -& " + $(".explanation").text());
phantom.exit(0);
phantom.exit(1);
3.执行状态为一直卡在那里,不报错也不退出
为了查看程序的内部执行状态,加入运行日志
page.onResourceRequested = function (req) {
console.log('requested: ' + JSON.stringify(req, undefined, 4));
page.onResourceReceived = function (res) {
console.log('received: ' + JSON.stringify(res, undefined, 4));
4.发现程序一直卡在一个js的请求
/ajax/libs/jquery/1.6.1/jquery.min.js
5.在自己的服务器上用python的SimpleHTTPServer 简单搭了一个http的server先FQ把这个js下载下来,放到web上
6.修改代码把includeJS指向自己搭的http server上
调试过程发现phantomjs还有一个问题,就是page.open是异步执行的,如下代码:
var webPage = require('webpage');
var page = webPage.create();
page.open('/', function(status) {
console.log('Status: ' + status);
// Do other things here...
phantom.exit(1)
你执行完后,打印返回值,echo $?,会得到1
phantom.exit(1)
注释之后,会得到status值。
阅读(...) 评论()28被浏览5531分享邀请回答31 条评论分享收藏感谢收起1添加评论分享收藏感谢收起写回答}

我要回帖

更多关于 phantomjs 写文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信