[Checkins]
SVN: zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/
- fix test wiring
Benji York
benji at zope.com
Tue Sep 11 05:16:21 EDT 2007
Log message for revision 79559:
- fix test wiring
- add nicer error message for when MozRepl isn't running
- change timeout to be browser attribute (need to start working on an
interface for the "real" testbrowser and reconsile that interface with the
others)
- finally add good page load detection
Changed:
U zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.js
U zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.py
U zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/screen-shots.txt
U zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/tests.py
-=-
Modified: zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.js
===================================================================
--- zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.js 2007-09-11 03:45:30 UTC (rev 79558)
+++ zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.js 2007-09-11 09:16:20 UTC (rev 79559)
@@ -134,3 +134,8 @@
file.initWithPath(out_path);
persist.saveURI(source, null, null, null, null, file);
}
+
+
+tb_page_loaded = false;
+document.getElementById("appcontent"
+ ).addEventListener("load", function() { tb_page_loaded = true; }, true);
Modified: zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.py
===================================================================
--- zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.py 2007-09-11 03:45:30 UTC (rev 79558)
+++ zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/real.py 2007-09-11 09:16:20 UTC (rev 79559)
@@ -3,6 +3,7 @@
import os.path
import re
import simplejson
+import socket
import telnetlib
import time
import zope.interface
@@ -15,6 +16,7 @@
raiseHttpErrors = True
_counter = 0
+ timeout = 60
def __init__(self, url=None, host='localhost', port=4242):
self.timer = zope.testbrowser.browser.PystoneTimer()
@@ -27,7 +29,12 @@
def init_repl(self, host, port):
dir = os.path.dirname(__file__)
js_path = os.path.join(dir, 'real.js')
- self.telnet = telnetlib.Telnet(host, port)
+ try:
+ self.telnet = telnetlib.Telnet(host, port)
+ except socket.error, e:
+ raise RuntimeError('Error connecting to Firefox at %s:%s.'
+ ' Is MozRepl running?' % (host, port))
+
self.telnet.write(open(js_path, 'rt').read())
def execute(self, js):
@@ -49,10 +56,9 @@
for line in lines:
self.execute(line)
- def expect(self, res, timeout=60):
- i, match, text = self.telnet.expect([PROMPT], timeout)
+ def expect(self, res):
+ i, match, text = self.telnet.expect([PROMPT], self.timeout)
if match is None:
- import pdb;pdb.set_trace()
raise RuntimeError('unexpected result from MozRepl')
return i, match, text
@@ -63,23 +69,21 @@
def url(self):
return self.execute('content.location')
- def _primePageLoadWait(self):
- # save the current document element to compare against later
- self.execute('tb_prev_document = content.document.documentElement;')
+ def waitForPageLoad(self):
+ start = time.time()
+ while self.execute('tb_page_loaded') == 'false':
+ time.sleep(0.001)
+ if time.time() - start > self.timeout:
+ raise RuntimeError('timed out waiting for page load')
- def _waitForPageLoad(self):
- # wait for the page to load
- while self.execute('content.document.documentElement'
- '.isSameNode(tb_prev_document)') == 'true':
- time.sleep(0.001)
+ self.execute('tb_page_loaded = false;')
def open(self, url, data=None):
assert data is None
self.start_timer()
try:
- self._primePageLoadWait()
self.execute('content.location = ' + simplejson.dumps(url))
- self._waitForPageLoad()
+ self.waitForPageLoad()
finally:
self.stop_timer()
self._changed()
@@ -128,16 +132,16 @@
def reload(self):
self.start_timer()
- self._primePageLoadWait()
self.execute('content.document.location = content.document.location')
- self._waitForPageLoad()
+ self.waitForPageLoad()
self.stop_timer()
def goBack(self, count=1):
self.start_timer()
- self._primePageLoadWait()
self.execute('content.back()')
- self._waitForPageLoad()
+ # Our method of knowing when the page finishes loading doesn't work
+ # for "back", so for now just sleep a little, and hope it is enough.
+ time.sleep(1)
self.stop_timer()
self._changed()
Modified: zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/screen-shots.txt
===================================================================
--- zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/screen-shots.txt 2007-09-11 03:45:30 UTC (rev 79558)
+++ zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/screen-shots.txt 2007-09-11 09:16:20 UTC (rev 79559)
@@ -1,6 +1,4 @@
>>> from zope.testbrowser.real import Browser
>>> browser = Browser()
>>> browser.open('http://slashdot.org')
- >>> import time
- >>> time.sleep(3)
>>> browser.execute('tb_take_screen_shot("/tmp/1.png")')
Modified: zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/tests.py
===================================================================
--- zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/tests.py 2007-09-11 03:45:30 UTC (rev 79558)
+++ zope.testbrowser/branches/benji-zope.testbrowser.real/src/zope/testbrowser/tests.py 2007-09-11 09:16:20 UTC (rev 79559)
@@ -391,14 +391,14 @@
wire = doctest.DocFileSuite('over_the_wire.txt', optionflags=flags)
wire.level = 2
- wire = doctest.DocFileSuite('real.txt', optionflags=flags)
- wire.level = 3
+ real = doctest.DocFileSuite('real.txt', optionflags=flags)
+ real.level = 3
- wire = doctest.DocFileSuite('screen-shots.txt', optionflags=flags)
- wire.level = 3
+ screen_shots = doctest.DocFileSuite('screen-shots.txt', optionflags=flags)
+ screen_shots.level = 3
this_file = doctest.DocTestSuite(checker=checker)
- return unittest.TestSuite((this_file, readme, wire))
+ return unittest.TestSuite((this_file, readme, wire, real, screen_shots))
if __name__ == '__main__':
unittest.main(defaultTest='test_suite')
More information about the Checkins
mailing list