我试图在2个不同的用户之间切换2个浏览器窗口,以便在Python中进行测试

时间:2018-04-13 11:39:44

标签: python selenium automation

对于使用Selenium和Python的测试,我需要在2个用户的情况下打开2个浏览器会话,并在窗口1中进行更改时在另一个窗口中检查更新。 我可以通过将其打开为Chrome隐身模式而与其他用户打开第二个会话,但我不确定如何在两个打开的浏览器会话之间来回切换。

我尝试了以下提取作为示例,但由于第二个窗口是使用driver.get的新窗口,[-1]似乎无法将焦点重新调回window_before

window_after = driver.window_handles[0]
print('windows after', window_after)
time.sleep(2)
driver.switch_to.window(driver.window_handles[-1])

1 个答案:

答案 0 :(得分:1)

您应该为第二个用户会话实例化第二个驱动程序:

driver1 = webdriver.Chrome()
driver2 = webdriver.Chrome()

特定驱动程序实例的所有窗口共享相同的cookie;因此,您无法打开新窗口并期望创建第二个用户会话。第二个窗口将“看到”与第一个相同的cookie,导致它们被发送到您的网站,其中您的应用将看到访问者已经在第一个用户会话下登录。

创建第二个驱动程序实例为您提供了第二个隔离的cookie池(以及本地和会话存储),使您可以安全可靠地创建第二个用户会话。

虽然您可能已经找到了在同一驱动程序实例中打开隐身/私有窗口的方法,但WebDriver规范(构建Selenium)不支持此功能,因此不太可能跨浏览器和平台移植。

capybara-py可以根据需要轻松透明地实例化新的驱动程序实例:

import capybara

def test_concurrent_editors(page):
    page.visit("/")
    page.click_link("Sign In")
    page.fill_in("Username", value="alice@example.com")
    page.fill_in("Password", value="s33krit")
    page.click_button("Sign In")

    # ... do things with the default session

    with capybara.using_session("other user"):
        page.visit("/")
        page.click_link("Sign In")
        page.fill_in("Username", value="bob@example.com")
        page.fill_in("Password", value="p@ssw0rd")
        page.click_button("Sign In")

        # ... do things with the "other user" session

    # .... do more things with the default session

    with capybara.using_session("other user"):
        # ... do more things with the "other user" session

(注意:它带有一个pytest插件,可以公开page夹具,并在每次测试之间重置所有会话。)