我正在尝试使用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的页面位?
我在PhantomJS的一些文档中看到它可以访问全局"文档"对象,但我不知道是否也可以访问全局"窗口"对象.
所以我的问题是,有没有一种特殊的方法,或者我可以在使用PhantomJS初始化页面后直接调用窗口对象?
有谁知道我遇到了怎么样
[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) 在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结果是[] [] [] [] [] [] []黑色

并且jpg结果是大黑盒子
这使我们无法将phantomJS用作webjob和网站内部
注意:phantomjs在VM,WebRole和WorkerRole上工作正常
我正在尝试用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) 我今晚一直在网上,现在大约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) 我已经在网上搜索了两天,但我一无所获.也许我看错了 - 我不知道......
所以这就是:运行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
我正试图在我的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: …
我正在使用Rspec/Capybara和Poltergeist作为驱动程序来编写一些大型Web应用程序的测试.
我的问题是我想记录控制台上出现的消息,但到目前为止我一直无法这样做.
我知道的选项js_errors和phantomjs_logger,但我曾与他们的一些问题:
js_errors: false,我指定的文件phantomjs_logger保持为空;js_errors: true,console.log消息记录在指定的文件中phantomjs_logger,但几乎所有我的规格都失败,因为javascript错误甚至可能与我正在测试的导航示例无关.如何在不破坏每个js错误的规格的情况下保存控制台消息的任何想法?
澄清:我无法控制开发,我的任务是检查各种环境中整个应用程序堆栈的稳定性,从前端访问,因此清除所有的javascript错误是不可能的.我正在编写的规范也应该忽略javascript错误,如果它们不会损害接口的使用.
使用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) phantomjs ×10
javascript ×4
casperjs ×2
python ×2
ruby ×2
azure ×1
capybara ×1
ghostdriver ×1
jquery ×1
karma-mocha ×1
karma-runner ×1
node.js ×1
poltergeist ×1
rspec ×1
selenium ×1
testing ×1
unit-testing ×1
user-agent ×1
windows ×1