簡體   English   中英

使用Python從Selenium RC生成多個瀏覽器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM