4

Pythonnewbはこちら。テストケース全体で同じブラウザを再利用しようとしています。ただし、これを機能させるためにグローバル変数を渡す方法がわかりません。

現在、私はこの#!C:/Python27/python.exeのようなmain.pyを持っています

import unittest
import unittest, time, re, HTMLTestRunner, cgi
import os, sys, inspect

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException

global DRIVER
DRIVER  = webdriver.Firefox()

# Make all subfolders available for importing
cmd_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile( inspect.currentframe() ))[0]))
if cmd_folder not in sys.path:
    sys.path.insert(0, cmd_folder)

# Import test cases
from setup.testcaseA import *
from setup.testcaseB import *

# serialize the testcases (grouping testcases)
suite = unittest.TestSuite() # setup new test suite
suite.addTest(unittest.makeSuite(testcaseA))
suite.addTest(unittest.makeSuite(testcaseB))

runner = HTMLTestRunner.HTMLTestRunner()
print "Content-Type: text/html\n" # header is required for displaying the website
runner.run(suite)

そして、私は次のようなsetup/フォルダーにtestcaseA.pyファイルを持っています:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
import unittest, time, re, cgi

class testcaseA(unittest.TestCase):

    def setUp(self):
        #get global driver variable <- DOESNT WORK!
        self.driver = DRIVER            

    def testcaseA(self):
        driver = self.driver
        #Bunch of tests

    def tearDown(self):
        #self.driver.quit() <- Commented out, because I want to continue re-using the browser

testcaseB.pyは基本的にtestcaseA.pyと同じです

main.pyを実行すると、次のエラーが発生します。ft1.1:トレースバック(最後の最後の呼び出し):ファイル "C:\ test \ setup \ testcaseA.py"、行10、setUp self.driver = DRIVER #getグローバルドライバ変数NameError:グローバル名'DRIVER'が定義されていません

助言がありますか?

ありがとう!

4

2 に答える 2

10

別のモジュールを作成してみて(私は通常、そのようなものにpkg .__ init__を使用します)、そこにセレンドライバーを返す関数を配置します。もちろん、キャッシュされたものがすでに存在する場合はそれを返します。例えば。mypkg / __init__。pyで

from selenium import webdriver

DRIVER = None

def getOrCreateWebdriver():
    global DRIVER
    DRIVER = DRIVER or webdriver.Firefox()
    return DRIVER

そして、テストから次のように呼び出します。

import mypkg
...
class testcaseA(unittest.TestCase):

    def setUp(self):
        self.driver = mypkg.getOrCreateWebdriver()
于 2012-05-16T21:56:14.107 に答える
3

testcaseA.pyはDRIVERが何であるかを知らないため、例外があります。どういうわけかそれをインポートする必要があります。main.pyから直接インポートすることはできません。これは、循環依存が発生するためです。最善の解決策は、別のモジュールでDRIVERを作成することです。

Pythonでのテストから旅を始める場合は、nosetestsライブラリをご覧ください。後悔はしないよ!

于 2012-05-16T22:05:52.400 に答える