From 30d90f9f359e3186094354301169c876bcbecdfc Mon Sep 17 00:00:00 2001 From: Joe Ferris Date: Fri, 11 Mar 2011 12:07:30 -0500 Subject: [PATCH] Fixed alert/confirm/prompt crashing the page --- spec/driver_spec.rb | 25 +++++++++++++++++++++++++ src/WebPage.cpp | 19 +++++++++++++++++++ src/WebPage.h | 3 +++ 3 files changed, 47 insertions(+) diff --git a/spec/driver_spec.rb b/spec/driver_spec.rb index 38295d2..906b2d7 100644 --- a/spec/driver_spec.rb +++ b/spec/driver_spec.rb @@ -437,4 +437,29 @@ describe Capybara::Driver::Webkit do subject.find("//p").first.text.should == "/next" end end + + context "popup app" do + before(:all) do + @app = lambda do |env| + body = <<-HTML + + +

success

+ + HTML + sleep(0.5) + [200, + { 'Content-Type' => 'text/html', 'Content-Length' => body.length.to_s }, + [body]] + end + end + + it "doesn't crash from alerts" do + subject.find("//p").first.text.should == "success" + end + end end diff --git a/src/WebPage.cpp b/src/WebPage.cpp index 5c22b57..d71f21c 100644 --- a/src/WebPage.cpp +++ b/src/WebPage.cpp @@ -43,6 +43,25 @@ void WebPage::javaScriptConsoleMessage(const QString &message, int lineNumber, c std::cout << qPrintable(message) << std::endl; } +void WebPage::javaScriptAlert(QWebFrame *frame, const QString &message) { + Q_UNUSED(frame); + std::cout << "ALERT: " << qPrintable(message) << std::endl; +} + +bool WebPage::javaScriptConfirm(QWebFrame *frame, const QString &message) { + Q_UNUSED(frame); + Q_UNUSED(message); + return true; +} + +bool WebPage::javaScriptPrompt(QWebFrame *frame, const QString &message, const QString &defaultValue, QString *result) { + Q_UNUSED(frame) + Q_UNUSED(message) + Q_UNUSED(defaultValue) + Q_UNUSED(result) + return false; +} + void WebPage::loadStarted() { m_loading = true; } diff --git a/src/WebPage.h b/src/WebPage.h index ec65e47..8bbba10 100644 --- a/src/WebPage.h +++ b/src/WebPage.h @@ -18,6 +18,9 @@ class WebPage : public QWebPage { protected: virtual void javaScriptConsoleMessage(const QString &message, int lineNumber, const QString &sourceID); + virtual void javaScriptAlert(QWebFrame *frame, const QString &message); + virtual bool javaScriptConfirm(QWebFrame *frame, const QString &message); + virtual bool javaScriptPrompt(QWebFrame *frame, const QString &message, const QString &defaultValue, QString *result); private: QString m_capybaraJavascript;