[英]Spawning multiple browsers from Selenium RC utilizing Python
我一直在嘗試使用Selenium RC和Python開發一個自動化的測試用例解決方案,經過長時間的測試,可以說,我遇到了很大的困難。
我有三個文件:unit.py,case1.py和case1m.py
unit.py使用瀏覽器和端口配置case1m.py的實例,然后通過unittest.main()發送case1m實例來運行測試。
case1.py文件是從Selenium IDE生成的普通用例。 從命令行運行時,它將執行測試用例並單擊確定退出。 我使用此文件來幫助調試其他兩個文件的失敗點。
這是所有三個文件的來源:
unit.py:
import unittest
from case1m import case1m
browser = "*chrome"
port = 4444
a = case1m()
a.setBrowser("*chrome",4444)
unittest.main(a)
case1m.py-處理瀏覽器/端口參數並運行硒測試用例:
from selenium import selenium
import unittest, time, re
class case1m(unittest.TestCase):
def setBrowser(self,b,p):
print "entered setBrowser"
self.browser = b
self.port = p
print "leaving setBrowser"
self.setUp()
def setUp(self):
print self.browser,", ",self.port
self.verificationErrors = []
self.selenium = selenium("localhost", self.browser, self.port, "http://megagate-ffcdcb.xl_net.internal/")
self.selenium.start()
print "end setUp"
self.runTest()
def runTest(self):
print "entered runTest"
sel = self.selenium
sel.open("/seltest/")
try: self.failUnless(sel.is_text_present("BODY"))
except AssertionError, e: self.verificationErrors.append(str(e))
print "leaving runTest"
self.tearDown()
def tearDown(self):
print "entered tearDown"
self.selenium.stop()
self.assertEqual([], self.verificationErrors)
print "leaving tearDown"
case1.py:
from selenium import selenium
import unittest, time, re
class case1(unittest.TestCase):
def setUp(self):
print "entered setUp"
self.verificationErrors = []
self.selenium = selenium("localhost", 4444, "*chrome", "http://megagate-ffcdcb.xl_net.internal/")
self.selenium.start()
def runTest(self):
sel = self.selenium
sel.open("/seltest/")
try: self.failUnless(sel.is_text_present("BODY"))
except AssertionError, e: self.verificationErrors.append(str(e))
def tearDown(self):
self.selenium.stop()
self.assertEqual([], self.verificationErrors)
if __name__ == '__main__':
unittest.main()
我遇到的第一個問題是將瀏覽器和端口值傳遞給case1m類的實例。 我嘗試使用__init__
收集它們作為參數,但是顯然將TestCase類子類化,然后添加__init__
覆蓋會導致問題; setUp(),runTest()和tearDown()方法不再像case1類中那樣自動觸發。
因此,我改為覆蓋並插入了setBrowser()方法來收集值並在類實例內創建瀏覽器和端口變量。 這再次導致了與以前相同的問題,因此我求助於將方法調用插入到setUp(),runTest()和tearDown()中。 執行后,它將一直運行,直到在selenium實例中嘗試使用do_command()方法為止。
這是錯誤:
追溯(最近一次通話):
在第13行的文件“ C:\\ sel-test \\ unit.py”
a.setBrowser(“ * chrome”,4444)
setBrowser中的文件“ C:\\ sel-test \\ case1m.py”,第10行
self.setUp()
setUp中第16行的文件“ C:\\ sel-test \\ case1m.py”
self.selenium.start()
開始時,文件“ C:\\ Python26 \\ lib \\ selenium.py”,第190行
結果= self.get_string(“ getNewBrowserSession”,[self.browserStartCommand,self.browserURL,self.extensionJs])
get_string中的文件“ C:\\ Python26 \\ lib \\ selenium.py”,第225行
結果= self.do_command(動詞,args)
do_command中的文件“ C:\\ Python26 \\ lib \\ selenium.py”,第213行
conn.request(“ POST”,“ / selenium-server / driver /”,正文,標題)
請求中的文件“ C:\\ Python26 \\ lib \\ httplib.py”,第910行
self._send_request(方法,URL,正文,標頭)
_send_request中的第947行“ C:\\ Python26 \\ lib \\ httplib.py”文件
self.endheaders()
文件“ C:\\ Python26 \\ lib \\ httplib.py”,第904行,位於標題行中
self._send_output()
_send_output中的文件“ C:\\ Python26 \\ lib \\ httplib.py”,行776
self.send(msg)
發送中的文件“ C:\\ Python26 \\ lib \\ httplib.py”,行735
self.connect()
連接中的文件“ C:\\ Python26 \\ lib \\ httplib.py”,行716
自我超時)
create_connection中的文件“ C:\\ Python26 \\ lib \\ socket.py”,第500行
對於getaddrinfo中的res(主機,端口,0,SOCK_STREAM):
socket.gaierror:[Errno 10109] getaddrinfo失敗
我的問題是:當case1.py文件無錯誤運行時,為什么unit.py/case1m.py組合會導致socket.gaierror? 從我的看到,硒類在到達self.do_command()時應該已經收到了完全相同的信息。 唯一的區別是case1.py是直接從命令行運行的,而case1m.py是作為導入模塊運行的。
並排看兩個代碼片段,我認為您已經顛倒了瀏覽器和端口參數。 這可能是錯誤的根源。
case1.py(運行正常):
self.selenium = selenium("localhost", 4444, "*chrome", "http://megagate-ffcdcb.xl_net.internal/")
case1m.py(套接字錯誤):
self.selenium = selenium("localhost", self.browser, self.port, "http://megagate-ffcdcb.xl_net.internal/")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.