在运行由seleniumidepython远程控制插件格式化程序导出的多个Python测试脚本时,我遇到了几个问题。在
1)python脚本完成后,浏览器窗口将自动关闭。例如,我在Firefox中运行测试。在
2)Selenium不能用python导出它的测试套件。如何在python中复制测试套件功能?在
我之所以花时间在Python中运行测试脚本,是因为我们的测试用例解决方案(Testuff)软件允许API调用更新通过Selenium测试用例自动化运行的相邻测试用例。在
下面是一个包含API调用的代码示例。在
谢谢。在
from selenium import selenium
import unittest, time, re
class python_script(unittest.TestCase):
def setUp(self):
self.verificationErrors = []
self.selenium = selenium("localhost", 4444, "*chrome", "http://test website url/")
self.selenium.start()
def test_python_script(self):
sel = self.selenium
from selenium import selenium
import unittest, time, re, urllib
class python_script(unittest.TestCase):
def setUp(self):
self.verificationErrors = []
self.selenium = selenium("localhost", 4444, "*chrome", "http://test website url/")
self.selenium.start()
def test_python_script(self):
sel = self.selenium
sel.open("http://192.168.48.23/labmatrix")
for i in range(60):
try:
if sel.is_element_present("//*[@name='username']"):
break
except: pass
#time.sleep(1)
else:
fields = {"test_id" : "testuff test_id number","status" : "failed"}
result = urllib.urlopen("testuff api url", urllib.urlencode(fields))
print result.read()
self.fail("time out")
sel.type("//*[@name='username']", "username")
for i in range(60):
try:
if sel.is_element_present("//*[@name='password']"): break
except: pass
#time.sleep(1)
else:
fields = {"test_id" : "testuff test_id number","status" : "failed"}
result = urllib.urlopen("testuff api url", urllib.urlencode(fields))
print result.read()
#self.fail("time out")
sel.type("//*[@name='password']", "password")
for i in range(60):
try:
if sel.is_element_present("//*[@id='submitButton']"): break
except: pass
#time.sleep(1)
else:
fields = {"test_id" : "testuff test_id number","status" : "failed"}
result = urllib.urlopen("testuff api url", urllib.urlencode(fields))
print result.read()
self.fail("time out")
sel.click("//*[@id='submitButton']")
#time.sleep(0.1)
for i in range(60):
try:
if sel.is_element_present("//*[@id='loadingDeck'][@selectedIndex='1']"):
fields = {"test_id" : "testuff test_id number","status" : "passed"}
result = urllib.urlopen("testuff api url", urllib.urlencode(fields))
print result.read()
break
except: pass
#time.sleep(1)
else:
self.fail("time out")
def tearDown(self):
self.selenium.stop()
self.assertEqual([], self.verificationErrors)
if __name__ == "__main__":
unittest.main()
def tearDown(self):
self.selenium.stop()
self.assertEqual([], self.verificationErrors)
if __name__ == "__main__":
unittest.main()
谢谢你的快速反应。我用以下代码尝试了jcfollower的建议:
^{pr2}$…不幸的是,浏览器窗口仍然关闭。还有其他建议吗?在
谢谢。在
让它部分工作。在
删除其中一个:
if __name__ == "__main__":
unittest.main()
def tearDown(self):
self.selenium.stop()
self.assertEqual([], self.verificationErrors)
…并移除了:
self.selenium.stop()
从剩余的“if __name__
”语句和python日志以及浏览器窗口保持打开状态。这是正确的一步,但我需要在脚本运行完成后关闭日志窗口。在
我猜下一步是创建另一个stop类并在硒.py文件一点,看看我能不能删除关闭浏览器的命令。在
如果有人有任何其他建议,将不胜感激。在
firefox每次重新启动的原因是在调用每个单元测试函数之前调用setUp(类似地,在调用之后调用tearDown)。因此,单元测试只是为每个测试创建一个新的selenium浏览器实例。不过,这不一定是坏事,但重复使用同一个浏览器会话可能会更快。在
为了克服这个问题,可以使用setUpClass/tearDownClass类方法,如下所示:
请注意,setUpClass和tearDownClass只在Python2.7中引入!如果您使用的是旧版本的python,您仍然可以使用它,但是您必须安装一个名为unittest2的库。安装后,只需将脚本顶部的导入行更改为类似
^{pr2}$如果删除第二组import语句、第二组Class语句和第二个setUp函数,然后重命名test_python_脚本函数,使它们的末尾有_1和_2,是否有效。在
相关问题 更多 >
编程相关推荐