我有这个功能,找到按钮并单击它,但在该警报出现后我需要使用phantom.js确认它
function() {
page.evaluate(function() {
$('.item-list clicked').first().find($('.comment-delete')).find('a').click();
})
}
可能是我可以模拟立即点击提醒的功能吗?或者使用函数waitFor来等待这个警报?(不太可能这样,waitFor只等待DOM对象我认为是这样)
答案 0 :(得分:6)
我找不到其他帮助我回答这个问题的stackoverflow答案,但基本上你可以注入一个确认警告弹出窗口的javascript函数:
这是我的python webdriver实现:
def example_js_confirmation( self ):
js_confirm = 'window.confirm = function(){return true;}' # .js function to confirm a popup
self.execute_javascript( js_confirm )
self.find_by_id( 'submit' ).click()
self.execute_javascript( 'return window.confirm' ) # trigger the injected js that returns true (virtually click OK)
这是某人的待办事项列表=): Selenium Desired Capabilities - set handlesAlerts for PhantomJS driver
答案 1 :(得分:3)
据我所知,Phantom.JS无头。 您唯一能做的就是使用
获取警报的上下文window.onAlert = function(alertText){
...
}
但我认为不超过这个。 您不能以编程方式关闭(通常)或渲染(在Phantom.JS中)警报。
有些消息来源:
* Render JavaScript alerts with Phantom.JS
* Close alert programmatically
答案 2 :(得分:0)
“确认提醒”是一个令人困惑的短语,因为Javascript同时提供alert
(显示带有确定按钮的消息)和confirm
(显示确定和取消按钮),并且它不是明确你的意思。
至少PhantomJS 2.x的行为就好像它在alert
框上单击“确定”并在confirm
框上单击“取消”。
如果您想在confirm
框上点击“确定”而不是“取消”,只要您不担心,就可以致电execute_javascript
覆盖window.confirm
以返回true
关于在加载过程中弹出的confirm
个框将在execute_javascript
有机会介入之前处理。如果你想抓住那些,我能想到的最好的事情是修补PhantomJS源或通过上游代理注入JS。
答案 3 :(得分:-1)
答案 4 :(得分:-1)
我做到了:
// 1) override window.alert
page.evaluate(function(){
window.alert = function(msg){
window.callPhantom({alert: msg}); // will call page.onCallback()
return true; // will "close the alert"
};
});
// 2) re-bind to onAlert()
page.onCallback = function(obj) {
page.onAlert(obj.alert); // will trigger page.onAlert()
};