"IOError: [Errno 35] The resource is temporarily unavailable" with PhantomJS, python, selenium, unittest

I had a problem running unit tests using selenium and the PhantomJS driver. This seems to be due to a resource conflict for stderr / stdout in the PhantomJS process. Error:

  $ python -m unittest selenium_failure.SeleniumTestCase
 []
 [{u'timestamp ': 1395857498698, u'message': u '{"log": {"version": "1.2", "creator": {"name": "PhantomJS", "version": "1.9. 7 "}," pages ": [{" startedDateTime ":" 2014-03-26T18: 11: 38.347Z "," id ":" https://www.google.com/ "," title ":" Google "," pageTimings ": {" onLoad ": 294}}]," entries ": [{" startedDateTime ":" 2014-03-26T18: 11: 38.344Z "," time ": 127," request ": { "method": "GET", "url": "https://www.google.com/", "httpVersion": "HTTP / 1.1", "cookies": [], "headers": [{"name ":" User-Agent "," value ":" Mozilla / 5.0 (Macintosh; Intel Mac OS X) AppleWebKit / 534.34 (KHTML, like Gecko) PhantomJS / 1.9.7 Safari / 534.34 "}, {" name ":" Accept "," value ":" text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8 "}]," queryString ": []," headersSize ": - 1 , "bodySize": - 1}, "response": {"status": 200, "statusText": "OK", "httpVersion": "HTTP / 1.1", "cookies": [], "headers": [ {"name": "Date", "value": "Wed, 26 Mar 2014 18:11:37 GMT"}, {"name": "Expires", "value": "- 1"}, {"name ":" Cache-Control "," value ":" private, max-age = 0 "}, {" name ":" Content-Type "," value ":" text / html; charset = UTF-8  "}, {" name ":" Set-Cookie ", E
 =================================================== ======================
 ERROR: test_that_something_fails (selenium_failure.SeleniumTestCase)
 -------------------------------------------------- --------------------
 Traceback (most recent call last):
   File "selenium_failure.py", line 16, in test_that_something_fails
     print repr (self.selenium.get_log ('har'))
 IOError: [Errno 35] Resource temporarily unavailable

 -------------------------------------------------- --------------------
 Ran 1 test in 2.398s

 FAILED (errors = 1)

More information here: https://gist.github.com/lucaswiman/9788422

 import unittest import logging from selenium.webdriver import phantomjs import sys class SeleniumTestCase(unittest.TestCase): def setUp(self): self.selenium = phantomjs.webdriver.WebDriver() def tearDown(self): self.selenium.quit() def test_that_something_fails(self): self.selenium.get('https://www.google.com') print repr(self.selenium.get_log('browser')) print repr(self.selenium.get_log('har')) raise AssertionError() 

The error reproduces with this base on OS X, but not on Ubuntu 12.04. I believe that this does not apply to OS X, since I saw a similar error for our integration tests when running on Ubuntu, although I could not reproduce it in an isolated form.

  • Python 2.7.6
  • selenium == 2.35.0
  • phantomjs@1.9.7
+2
source share
1 answer

Fixed! An employee pointed me to this problem: http://trac.edgewall.org/ticket/2066#comment:1 I changed the patch there to make sys.__stderr__ and sys.__stdout__ block flag. Calling this function immediately after creating the WebDriver phantoms allowed stderr to be sent to stderr.

+2
source

All Articles