我正在使用python 2.7,Selenium和PhantomJs。
当我点击我的脚本中的登录按钮时,它会转到一个新页面,然后会出现一个我必须接受的弹出窗口。
这是我尝试使用的代码。我是从这里得到的 How can I handle an alert with GhostDriver via Python?
sign_in.click()
js = 'window.alert = function(message) { lastAlert = message; }'
driver.execute_script("%s" % js)
driver.execute_script("return lastAlert")
这是我得到的错误:
引发exception_class(消息,屏幕,堆栈跟踪) selenium.common.exceptions.WebDriverException:消息: {" errorMessage":"无法找到变量:lastAlert","请求":{" hea 德尔斯" {"接受":"应用/ JSON""接受编码":"身份""连接":"靠近"" Content-Length的":" 95""内容类型 ":"应用/ JSON;字符集= UTF-8""主机":" 127.0.0.1:56712""用户 - 剂":" Python的的urllib / 2.7"}" httpVersion":" 1.1""实现方法具 d":" POST""后":" {\"的sessionId \&#34 ;: \" 3832e2c0-4902-11e6-b766-0d7f487d0794 \",\" args \":[],\" script \": \"返回lastAlert \"}"" URL":" /执行"" urlParsed" {"锚":& #34;""查询":"""文件":"执行""目录&# 34;:" /""路径":" /执行""相对于&#34 ;: " /执行""端口":"""主机":"""密码":"""使用者":""" USERINFO":"&#34 ;, "权威":"""协议":"""源":" /执行"" q ueryKey":{},"大块":["执行"]}" urlOriginal":" /会话/ 3832e2c0-4902-11e6 -b766-0d7f487d0794 /执行"}} 屏幕截图:可通过屏幕获取
我对javascript不是很有经验,并且正确方向上的一点很有用。
答案 0 :(得分:0)
以下是我正在使用的Behat步骤:
/**
* This step overrides windows.confirm and basically accepts it before it is displayed.
*
* @When /^(?:|I )bypass the popup$/
*/
public function bypassPopup() {
$function = "
var realConfirm=window.confirm;
window.confirm=function(){
window.confirm=realConfirm;
return true;
};
";
$session = $this->getSession();
$session->executeScript($function);
}
在单击按钮之前放置它,当您单击弹出窗口时将自动接受。 在这种情况下,只接受第一个弹出窗口。