标签: phantomjs

直接从CasperJS调用JS方法

我正在尝试使用CasperJS测试页面,特别是我想要将数据模型捅一堆.假设我有一个称为税收的基本功能,我想确保它使用正确的税率.所以我想要像:

 this.test.assert(taxes(100, 'Ontario') === 15, "Check ontario tax rate");
Run Code Online (Sandbox Code Playgroud)

而不是填写表格并查看它打印的内容.该taxes方法存在于全局范围内,因此我可以从任何地方(包括来自firebug或Chrome中的控制台)轻松地执行它.但是,在CasperJS内部工作并不是合适的范围(我想?我得到了)ReferenceError: Can't find variable: taxes.

好像我错过了一些简单的东西.

TL; DR:如何在CasperJS测试中直接执行JS的页面位?

javascript testing phantomjs casperjs

2
推荐指数
1
解决办法
7392
查看次数

PhantomJS中的窗口对象

我在PhantomJS的一些文档中看到它可以访问全局"文档"对象,但我不知道是否也可以访问全局"窗口"对象.

所以我的问题是,有没有一种特殊的方法,或者我可以在使用PhantomJS初始化页面后直接调用窗口对象?

javascript node.js phantomjs

2
推荐指数
1
解决办法
7173
查看次数

casperJS失败注入jQuery

有谁知道我遇到了怎么样

[warning] [phantom] Failed injecting %s client side. 
Failed injecting includes/jquery-1.10.2.min.js client side 
Run Code Online (Sandbox Code Playgroud)

当我包括在内

'includes/jquery-1.10.2.min.js' 
Run Code Online (Sandbox Code Playgroud)

在Casper构造函数中.有人在这里发布了一个类似的问题:https://groups.google.com/forum/#!msg/casperjs/hY4ziaoXIEE/YFi8Sj4JysMJ,但我不明白他们如何在他们的解决方案中加入了casper.evaluate():

casper.then( function() {
this.evaluate(function($) {
console.log($('title').text());
}
}); 
Run Code Online (Sandbox Code Playgroud)

javascript jquery phantomjs casperjs

2
推荐指数
1
解决办法
9231
查看次数

Phantomjs在Azure网站上呈现黑盒子

在Azure网站上使用最新的Phantomjs二进制文件v1.9.7,它呈现黑盒而不是字符.

这是Azure上简单的phantomjs脚本的示例:

var page = require("webpage").create();
page.content = "Hello 123";
page.render("index.png");
phantom.exit(0);
Run Code Online (Sandbox Code Playgroud)

png和pdf结果是[] [] [] [] [] [] []黑色 Azure网站上来自phantomsJS的黑盒子

并且jpg结果是大黑盒子

这使我们无法将phantomJS用作webjob和网站内部

注意:phantomjs在VM,WebRole和WorkerRole上工作正常

azure phantomjs azure-web-sites

2
推荐指数
1
解决办法
1743
查看次数

PhantomJS点击图片并等待加载

我正在尝试用PhantomJS进行页面自动化.我的目标是能够访问网站,单击图像,并在点击加载页面后继续使用其他代码.为了测试这个,我正在尝试编写一个脚本,该脚本将转到PhantomJS网站上的快速入门指南的URL,然后单击PhantomJS徽标将页面带到PhantomJS主页.还要在点击之前和之后呈现网站的图片以确保点击有效.这是我目前的代码:

var page = require('webpage').create();

page.open('http://phantomjs.org/quick-start.html', function(status) {
console.log(status);
page.render('websiteBeforeClick.png');
console.log(page.frameUrl); //check url before click

var element = page.evaluate(function() {
  return document.querySelector('img[alt="PhantomJS"]');
});

page.sendEvent('click', element.offsetLeft, element.offsetTop, 'left');

window.setTimeout(function () {
console.log(page.frameUrl); //check url after click
}, 3000);

console.log('element is ' + element); //check that querySelector() is returning an element
page.render('websiteAfterClick.png');
phantom.exit();
});
Run Code Online (Sandbox Code Playgroud)

问题是我之前和之后的图片是一样的.这是我运行时的输出.

 success
 element is [object Object]
Run Code Online (Sandbox Code Playgroud)

我在这里使用他们的sendEvent方法" http://phantomjs.org/api/webpage/method/send-event.html ",但我不确定它是否有效.

另外为什么我的window.setTimeout()中的console.log(page.frameUrl)没有被执行?

我在PhantomJS网站上查看了他们的页面自动化示例.特别是这个" https://github.com/ariya/phantomjs/blob/master/examples/imagebin.js ".我注意到他们使用的例子

document.querySelector('input[name=disclaimer_agree]').click()
Run Code Online (Sandbox Code Playgroud)

但当我用我的代码尝试它时,我收到了一个错误.

document.querySelector('img[alt="PhantomJS"]').click();
TypeError: 'undefined' is not a function
Run Code Online (Sandbox Code Playgroud)

编辑#1:

我将代码的结尾部分更改为:

page.sendEvent('click', element.offsetLeft, element.offsetTop, 'left'); …
Run Code Online (Sandbox Code Playgroud)

javascript phantomjs

2
推荐指数
1
解决办法
1万
查看次数

使用Ruby在Selenium Webdriver中为PhantomJS设置自定义用户代理

我今晚一直在网上,现在大约3-4个小时.我已经尝试过每一个我遇到过的建议.我甚至检查了Selenium驱动程序对象上的"capabilities"对象,以确保它实际设置在那里,实际上它是:

#<Selenium::WebDriver::Remote::Capabilities:0x00000007475cf0
 @capabilities=
  {:browser_name=>"phantomjs",
   :version=>"1.9.7",
   :platform=>:"linux-unknown-64bit",
   :javascript_enabled=>true,
   :css_selectors_enabled=>true,
   :takes_screenshot=>true,
   :native_events=>true,
   :rotatable=>false,
   :firefox_profile=>nil,
   :proxy=>#<Selenium::WebDriver::Proxy:0x00000007475908 @type=:direct>,
   "driverName"=>"ghostdriver",
   "driverVersion"=>"1.1.0",
   "handlesAlerts"=>false,
   "databaseEnabled"=>false,
   "locationContextEnabled"=>false,
   "applicationCacheEnabled"=>false,
   "browserConnectionEnabled"=>false,
   "webStorageEnabled"=>false,
   "acceptSslCerts"=>false,
   "proxy"=>{"proxyType"=>"direct"},
   "phantomjs.page.settings.userAgent"=>
    "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:27.0) Gecko/20100101 Firefox/27.0"}>
Run Code Online (Sandbox Code Playgroud)

除了"phantomjs.page.settings.userAgent"之外,我还尝试了"userAgent"等等.在过去的3-4个小时里我能在网上找到的所有东西,我都试过了.显然,在2013年初,这是一个相当普遍的问题,而我所说的解决方案显然是常见的解决方案.这些都不起作用,事实上,我从这一点信息中确切地知道这一点(注意User-Agent是"Ruby"):

UNCAUGHT EXCEPTION: {"errorMessage"=>"Element is not currently visible and may not be manipulated",
 "request"=>
  {"headers"=>
    {"Accept"=>"application/json",
     "Accept-Encoding"=>"gzip;q=1.0,deflate;q=0.6,identity;q=0.3",
     "Connection"=>"close",
     "Content-Length"=>"2",
     "Content-Type"=>"application/x-www-form-urlencoded",
     "Host"=>"localhost:9876",
     "User-Agent"=>"Ruby"},
   "httpVersion"=>"1.1",
   "method"=>"POST",
   "post"=>"{}",
   "postRaw"=>"{}",
   "url"=>"/click",
   "urlParsed"=>
    {"anchor"=>"",
     "query"=>"",
     "file"=>"click",
     "directory"=>"/",
     "path"=>"/click",
     "relative"=>"/click",
     "port"=>"",
     "host"=>"",
     "password"=>"",
     "user"=>"",
     "userInfo"=>"",
     "authority"=>"",
     "protocol"=>"",
     "source"=>"/click",
     "queryKey"=>{},
     "chunks"=>["click"]},
   "urlOriginal"=> …
Run Code Online (Sandbox Code Playgroud)

ruby user-agent phantomjs selenium-webdriver ghostdriver

2
推荐指数
1
解决办法
5652
查看次数

解释业力单位测试时间

我已经在网上搜索了两天,但我一无所获.也许我看错了 - 我不知道......

所以这就是:运行Karma + Jasmine + phantomJs单元测试时我的控制台上有什么时间?

... Executed 1 of 1 SUCCESS (0.878 secs / 0.112 secs)
Run Code Online (Sandbox Code Playgroud)

首先,我认为第二次是总单位测试时间(例如,当运行多个任务时),但是,有时第一次变得"更大",有时候不是......

任何人?

unit-testing phantomjs karma-runner karma-jasmine karma-mocha

2
推荐指数
1
解决办法
1031
查看次数

无法在Windows 7中使用Python启动PhantomJS

我正试图在我的Windows 7中使用PhantomJS和Python,但是没有用!这是我试图做的.

首先,我安装了webdriver.在以下代码中Firefox正常打开,所以我相信webdrive已正确安装.

from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://seleniumhq.org/')
Run Code Online (Sandbox Code Playgroud)

然后,我从官方网站下载了PhantomJS,将其解压缩并放入c:\ Phantomjs.然后我将它添加到环境变量中.这里有什么:

C:\幻影\ phantomjs-2.0.0-WINDOWS \斌

所以,当我在终端输入"phantomjs"时,它会正常启动.但是下面的代码给出了一个错误:

from selenium import webdriver
browser = webdriver.PhantomJS( )
Run Code Online (Sandbox Code Playgroud)

错误信息:

在以下情况中忽略异常:> Traceback(最近一次调用最后一次):文件"c:Python34\lib\site-packages\selenium\webdriver\common\service.py",第136行,在del 文件中"c:Python34\lib\site -packages\selenium\webdriver\common\service.py",第124行,在stop AttributeError:'NoneType'对象没有属性'close'

在这里,如果我改变一点代码:

from selenium import webdriver
browser = webdriver.PhantomJS(executable_path='C:\Phantom\phantomjs-2.0.0-windows\bin\phantomjs.exe')
Run Code Online (Sandbox Code Playgroud)

错误信息:

Traceback(最近一次调用最后一次):

文件"c:Python34\lib\site-packages\selenium\webdriver\common\service.py",第62行,开头

stdout = self.log_file,stderr = self.log_file)

init中文件"c:Python34\lib\subprocess.py",第859行

restore_signals,start_new_session)

文件"c:Python34\lib\subprocess.py",第1112行,在_execute_child startupinfo中)

FileNotFoundError:[WinError 2]系统找不到指定的文件

在处理上述异常期间,发生了另一个异常:

Traceback(最近一次调用最后一次):

文件"d:\ test.py",第2行,in

browser = webdriver.PhantomJS(executable_path ='C:\ Phantom\phantomjs-2.0.0-windows\bin\phantomjs')

init self.service.start()中的文件"c:Python34\lib\site-packages\selenium\webdriver\common\service.py",第51行

在启动os.path.basename(self.path)中的文件"c:Python34\lib\site-packages\selenium\webdriver\common\service.py",第69行,

self.start_error_message)

selenium.common.exceptions.WebDriverException:消息:'phantomjs'可执行文件需要在PATH中.

在:del of中忽略了异常

>

Traceback(最近一次调用最后一次):

文件"c:Python34\lib\site-packages\selenium\webdriver\common\service.py",第136行,在del self.stop()中

文件"c:Python34\lib\site-packages\selenium\webdriver\common\service.py",第117行,停止

如果self.process是None: …

python windows phantomjs

2
推荐指数
1
解决办法
3556
查看次数

如何使用Poltergeist/Capybara/Rspec记录javascript错误?

我正在使用Rspec/Capybara和Poltergeist作为驱动程序来编写一些大型Web应用程序的测试.

我的问题是我想记录控制台上出现的消息,但到目前为止我一直无法这样做.

我知道的选项js_errorsphantomjs_logger,但我曾与他们的一些问题:

  • 如果我设置js_errors: false,我指定的文件phantomjs_logger保持为空;
  • 如果我设置js_errors: true,console.log消息记录在指定的文件中phantomjs_logger,但几乎所有我的规格都失败,因为javascript错误甚至可能与我正在测试的导航示例无关.

如何在不破坏每个js错误的规格的情况下保存控制台消息的任何想法?

澄清:我无法控制开发,我的任务是检查各种环境中整个应用程序堆栈的稳定性,从前端访问,因此清除所有的javascript错误是不可能的.我正在编写的规范也应该忽略javascript错误,如果它们不会损害接口的使用.

ruby rspec capybara phantomjs poltergeist

2
推荐指数
1
解决办法
1757
查看次数

Python + Selenium有效地获取列表中元素的属性

使用Python,Selenium和PhantomJS获取多个元素的相同属性的最有效方法是什么?我的解决方案使用find_elements_by_css_selector哪个定位我需要的所有元素,这需要不到一秒钟,然后我循环遍历列表以获取我需要的属性.我的循环花费了大约2500个元素的一分钟,考虑到所有元素都是用find_elements_by_css_selector方法映射的,这对我来说似乎很多.是get_attribute方法真的那么贵还是我做错了什么?

from selenium import webdriver

driver = webdriver.PhantomJS(executable_path=r'mypath\phantomjs.exe')
driver.set_window_size(1120, 550)
driver.get("https://www.something.com")

table = []
elements = driver.find_elements_by_css_selector("tr[id*='bet-']") # takes under 1 second

for element in elements:
   table.append(element.get_attribute('data-info')) # takes over 60 seconds (2000 elements)

driver.close
Run Code Online (Sandbox Code Playgroud)

python selenium phantomjs selenium-webdriver

2
推荐指数
1
解决办法
3477
查看次数