确认Phantom.js中的警告窗口

7

我有一个函数,它能够找到按钮并点击它,但之后会出现警告框,我需要使用Phantom.js确认它。

function() {
  page.evaluate(function() {
    $('.item-list clicked').first().find($('.comment-delete')).find('a').click();
  })
}

也许我可以模拟调用alert函数而无需立即点击?或者使用waitFor函数等待这个弹窗?(不太可能,因为我认为waitFor只能等待DOM对象)
4个回答

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 - 设置PhantomJS驱动程序的handlesAlerts


3
据我所知,Phantom.JS是无界面的。你唯一能做的就是使用以下代码获取警告框的上下文信息:
window.onAlert = function(alertText){
    ...
   }

但我认为没有更多了。您不能通过编程方式关闭(通常情况下)或呈现(在Phantom.JS中)警报。

一些参考资料:
* 使用Phantom.JS呈现JavaScript警报
* 通过编程方式关闭警报


哦,很遗憾,但还是谢谢您的回答。也许您知道其他能够确认警报的工具吗? - Alice Polansky
1
你可以使用Zombie.js(请参见此处)。同时也可以看看SlimerJS:它可能有window.alert... - MarcoL

0
“确认警报”是一个令人困惑的短语,因为Javascript提供了alert(显示带有OK按钮的消息)和confirm(显示OK和取消按钮),并且不清楚你指的是哪一个。
至少PhantomJS 2.x的行为就像它在alert框上点击OK,在confirm框上点击取消。
如果你想在confirm框上点击OK而不是取消,你可以调用execute_javascript来覆盖window.confirm,只要你不担心在加载过程中弹出的confirm框,这些将在你的execute_javascript有机会介入之前处理。如果你也想捕捉到这些,我能想到的最好的办法就是修补PhantomJS源代码或通过上游代理注入JS。

-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()
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接