7

i have this function which find button and click it, but after that alert appears and i need to confirm it using phantom.js

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

may be i can emulate function which call alert whithout click immediately ? or use function waitFor for waiting this alert?(unlikely this, waitFor waiting only for DOM objects i think so)

4

4 回答 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 驱动程序设置句柄警报

于 2013-11-14T19:32:27.143 回答
3

据我所知,Phantom.JS 是无头的。您唯一能做的就是获取警报的上下文

window.onAlert = function(alertText){
    ...
   }

但我认为仅此而已。您不能以编程方式关闭(通常)或呈现(在 Phantom.JS 中)警报。

一些来源:
*使用 Phantom.JS 呈现 JavaScript 警报
*以编程方式关闭警报

于 2013-11-11T11:11:22.653 回答
0

“确认警报”是一个令人困惑的短语,因为 Javascript 提供了alert(显示带有 OK 按钮的消息)和confirm(显示 OK 和 Cancel 按钮),并且不清楚您指的是哪一个。

至少 PhantomJS 2.x 的行为就像在框上单击“确定”alert和在框上单击“取消”一样confirm

如果您想在框上单击“确定”而不是“取消” ,只要您不担心在加载过程中弹出的框会在您有机会干预之前处理confirm,您就可以调用execute_javascript覆盖window.confirm返回。如果你也想捕捉这些,我能想到的最好的办法是修补 PhantomJS 源或通过上游代理注入 JS。trueconfirmexecute_javascript

于 2017-06-27T12:30:52.663 回答
-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()
};
于 2015-12-02T15:54:58.453 回答