From 34db87c30ddffa0f18199de30620c354ca19e0bc Mon Sep 17 00:00:00 2001
From: Leah Klearman <lklrmn@gmail.com>
Date: Fri, 7 Sep 2012 17:40:25 -0700
Subject: [PATCH] attempt to fix window switch / close errors

3 occasions of 2 sporadic failures in ci logs as of 5pm friday

seen at
https://ci.mozilla.org/view/Persona/job/identity.browserid.dev.windows.x
p.ie.8/1315/testReport/junit/123done.tests.test_new_user/TestNewAccount/
test_can_create_new_user_account

self = <browserid.pages.sign_in.SignIn object at 0x188cf10>

    def close_window(self):
>       self.selenium.close()

browserid/pages/sign_in.py:53:

E       WebDriverException: Message: u'ERROR Internal Server Error'

------------

seen at
https://ci.mozilla.org/view/Persona/job/identity.browserid.dev.windows.7
.ie.9/1324/testReport/junit/123done.tests.test_sign_in/TestSignIn/test_t
hat_user_can_sign_in/

https://ci.mozilla.org/view/Persona/job/identity.browserid.dev.windows.7
.ie.9/1313/testReport/junit/123done.tests.test_change_password/TestChang
ePassword/test_can_change_user_password/

self = <browserid.pages.sign_in.SignIn object at 0x2a3ff10>
selenium = <selenium.webdriver.remote.webdriver.WebDriver object at
0x29b9bd0>
timeout = 90, expect = 'new'

    def __init__(self, selenium, timeout, expect='new'):
        Base.__init__(self, selenium, timeout)

>       selenium.switch_to_window('__persona_dialog')

browserid/pages/sign_in.py:38:

E       NoSuchWindowException: Message: u"No window found
---
 automation-tests/browserid/pages/sign_in.py | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/automation-tests/browserid/pages/sign_in.py b/automation-tests/browserid/pages/sign_in.py
index ffb54e656..bc58f0903 100644
--- a/automation-tests/browserid/pages/sign_in.py
+++ b/automation-tests/browserid/pages/sign_in.py
@@ -35,6 +35,9 @@ class SignIn(Base):
     def __init__(self, selenium, timeout, expect='new'):
         Base.__init__(self, selenium, timeout)
 
+        # wait for second window to open
+        WebDriverWait(self.selenium, self.timeout).until(
+            lambda s: s.window_handles > 1)
         selenium.switch_to_window('__persona_dialog')
 
         if expect == 'new':
@@ -50,7 +53,11 @@ class SignIn(Base):
             raise Exception('Unknown expect value: %s' % expect)
 
     def close_window(self):
-        self.selenium.close()
+        try:  # race condition with window closing by itself
+            self.selenium.close()
+        except:
+            # if it fails, the framework will capture a screenshot
+            pass
 
     @property
     def signed_in_email(self):
-- 
GitLab