【问题标题】:I am trying to switch between 2 browser windows using 2 different users for testing in Python我正在尝试使用 2 个不同的用户在 2 个浏览器窗口之间切换以在 Python 中进行测试
【发布时间】:2018-04-13 11:39:44
【问题描述】:

对于我使用 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])

【问题讨论】:

标签: python selenium automation


【解决方案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 固定装置并在每次测试之间重置所有会话。)

【讨论】:

  • 我正在夹具中设置驱动程序,以便可以将驱动程序作为参数传入你知道传递 2 个驱动程序实例进行 1 次测试的巧妙方法
  • @pytest.fixture() def driver(): return webdriver.Chrome('C:/Users/....
  • 您可以为此定义第二个夹具,将两者都指定为需要它的测试函数的参数。但我还提供了一些关于 capybara-py 的信息,这是一个制作它的库,因此您甚至不必考虑这些。
猜你喜欢
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 2021-11-04
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多