所以我正在尝试使用Splinter框架开始编写自动化测试。当我运行第一个方法时,浏览器就会关闭。我需要的是保持相同的浏览器打开,并允许我调用另一个将在该浏览器上操作的方法。我很困惑为什么它会关闭因为splinter有一个browser.quit()
,我认为我不得不打电话来退出但是如下所示,我没有这样称呼它。
from splinter import Browser
def testLogin(ipaddress, username):
global browser
with Browser('chrome') as browser:
url = "http://%s" % ipaddress
browser.visit(url)
browser.fill('EmailAddress', username)
browser.fill('Password','123456789')
button = browser.find_by_id('login')
button.first.click()
if browser.is_text_present('Summary of Orders'):
print("Pass: Login was succesful")
elif browser.is_text_present('There are currently no orders that are available for you to browse.'):
print("Pass: Login was succesful")
else:
print("Fail: Login was not succesful")
return
def createOrder():
browser.find_by_id('nav-OrderModule-Create').first.click()
browser.fill('nameBox','test')
testLogin("ipaddress","my@email")
createOrder()
答案 0 :(得分:4)
之前我遇到过这个问题。以下是我过去如何处理此问题。
class LoginTest(unitest.TestCase):
def setUp(self):
self.browser = Browser('chrome')
def test_login_with_username_and_password(self):
...
def tearDown(self):
self.browser.quit()
@ Gerrat的方法应该有效,但这是你可以采取的另一种方法。请注意setUp
和tearDown
方法,这些方法在每次测试后运行。
答案 1 :(得分:2)
由于您使用Browser
作为上下文管理器,因此只要该块结束,您的浏览器就会关闭。如果要使用同一浏览器运行多个测试,则应在同一实例仍处于打开状态时调用测试。类似的东西:
def my_tests():
with Browser('chrome') as browser:
testLogin(browser, "ipaddress","my@email")
createOrder(browser)
有了这个,您需要更改其他功能的签名以接受浏览器参数。
答案 2 :(得分:0)
我遇到了同样的问题。但我已经解决了如下: 关键点是“全局b”,如果我删除此语句,浏览器将自动关闭,但如果有此,浏览器将保留。希望它有所帮助。
global b
b=Browser("chrome")
我仔细检查了Splinter的官方网站文档,它解释说如果你使用“with”风格,浏览器会在到达“with”语句之外的代码时自动关闭。