2013-11-15 3 views
1

Я пытаюсь запустить это:глобальное имя не получает определить - питон

import unittest 
import wd.parallel 
from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.common.exceptions import WebDriverException 
import copy 
class Selenium2OnSauce(unittest.TestCase): 
    def setUp(self): 
     desired_capabilities = [] 

     browser = copy.copy(webdriver.DesiredCapabilities.FIREFOX) 
     browser['version'] = '10' 
     browser['platform'] = 'XP' 
     browser['name'] = 'Python at Sauce' 
     browser['tags'] = "Parallel" 
     desired_capabilities += [browser] 

     self.drivers = wd.parallel.Remote(
      desired_capabilities=desired_capabilities, 
      command_executor="http://user-string:[email protected]:80/wd/hub" 
     ) 

    def ajax_complete(driver): 
     try: 
      return 0 == driver.execute_script("return JQuery.active") 
     except WebDriverException: 
      pass  

    @wd.parallel.multiply 
    def test_sauce(self): 
     self.driver.get('http://url.com') 
     username = self.driver.find_element_by_id('id_username') 
     print "Found Username" 
     username.send_keys('[email protected]') 
     print "Username Entered" 

     password = self.driver.find_element_by_id('id_password') 
     print "Found Password" 
     password.send_keys('testuser')   
     print "Password Entered" 

     password.submit() 
     print "Logged in" 

     self.driver.find_elements_by_link_text('Notification')[0].click() 
     print "Going to Notification" 

     WebDriverWait(self.driver, 10).until(
      ajax_complete, "Timeout waiting for page to load" 
     ) 

     print "ajax loaded string" in self.drive.page_source 

    @wd.parallel.multiply 
    def tearDown(self): 
     print("Link to your job: https://saucelabs.com/jobs/%s" % self.driver.session_id) 
     self.driver.quit() 
     print "Quit" 

if __name__ == '__main__': 
    unittest.main() 

Когда я, так что я получаю это:

Found Username 
Entered Username 
Found Password 
Entered Password 
Logged in 
Going to Cal 
Process Process-1: 
Traceback (most recent call last): 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap 
    self.run() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/process.py", line 114, in run 
    self._target(*self._args, **self._kwargs) 
    File "build/bdist.macosx-10.8-intel/egg/wd/parallel.py", line 88, in thread_func 
    f(SubTest(driver)) 
    File "functionalTest.py", line 57, in test_sauce 
    ajax_complete, "Timeout waiting for page to load" 
NameError: global name 'ajax_complete' is not defined 
Link to your job: https://saucelabs.com/jobs/06022dc1f54548d98a75f59bd211848d 
Quit 

Я думаю, что у меня возникают проблемы с доступом к вар звоните ajax_complete, но я не знаю почему!

В конце дня, что я хочу сделать, это ждать, пока весь Аякс будет завершена, прежде чем запускать свой следующий тест ...

Примечания: Я питон новичок, поэтому я извиняюсь этот вопрос действительно глупо.

ответ

1

методы в Python доступны через self:

WebDriverWait(self.driver, 10).until(
    self.ajax_complete, "Timeout waiting for page to load" 
) 

Обратите внимание, что ajax_complete метод сам по себе также необходимо принимать self в качестве первого аргумента.

+0

В качестве альтернативы, 'ajax_complete' может быть определена как функция вне класса или как статический метод. – chepner

+0

как это: определение функции ajax_complete (Я): \t \t попробовать: \t \t \t возвращение 0 == self.driver.execute_script ("возвращение JQuery.active") \t \t кроме WebDriverException: \t \t \t pass' –

Смежные вопросы