【问题标题】:How to selenium test a website that uses Google OAuth如何对使用 Google OAuth 的网站进行硒测试
【发布时间】:2016-08-07 07:45:48
【问题描述】:

我正在构建一个网站,该网站使用 Google OAuth 来验证用户身份并代表用户在 Google 中执行操作(发送电子邮件、创建日历事件等)。

我想使用 selenium 来测试网站是否按预期工作。这包括特定于网站的内容(例如,按下此按钮会导致数据库中的此条目),也包括特定于 Google 的内容(例如,按下此按钮会导致发送此确切的电子邮件)。

如何合理地使用 selenium 进行测试?如何自动登录?我有什么方法可以测试用户 X 不能执行这些特定操作,但用户 Y 可以?

目前,我将 JSON 化的用户记录(使用 Google 凭据)保存在一个文件中,并在设置测试时加载该文件。如果找不到该文件,它会启动一个浏览器窗口并休眠,直到我使用该浏览器窗口手动登录。这感觉很老套和脆弱。它还阻止我进行 CI 测试,因为用户记录文件仅在我的机器上可用。

【问题讨论】:

    标签: selenium oauth google-api


    【解决方案1】:

    您可以创建不同的帐户来允许不同的权限。然后就像真正的用户一样简单地自动登录。 这是一个通过 GMail 登录 StackOverflow 的 Python 示例:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Firefox()
    wait = WebDriverWait(driver, 10)
    
    driver.get("https://stackoverflow.com/users/login")
    
    # Click GMail login
    driver.find_element_by_xpath("//span[.='Google']").click()
    
    # type email
    wait.until(EC.presence_of_element_located((By.ID, "Email"))).send_keys('...')
    
    # click next
    wait.until(EC.presence_of_element_located((By.ID, "next"))).click()
    
    # type password
    wait.until(EC.presence_of_element_located((By.ID, "Passwd"))).send_keys('...')
    
    # click signin
    wait.until(EC.presence_of_element_located((By.ID, "signIn"))).click()
    
    # wait for the end of the redirection
    wait.until(EC.presence_of_element_located((By.ID, "nav-questions")))
    

    【讨论】:

    • 谢谢弗洛伦特。我们使用的是 Google Apps,因此每个额外的帐户都会让我们花钱,如果有一种方法可以做到这一点而无需支付更多费用,那就太好了。我个人也在使用 2FA,所以我无法自动登录。
    • 您应该禁用 2FA,因为您的应用不处理身份验证过程。
    • 抱歉,我的意思是我为我的 Google 帐户启用了 2FA。因此,使用 Google 登录过程涉及提供 2FA 令牌,这是我无法自动化的。
    • 2FA 不是令牌,它表示“双因素身份验证”,在 GMail 中被标记为“两步验证”。您可以在设置中轻松禁用它。此示例使用 Gmail / OAuth2 自动登录以进行 1 步身份验证。
    • 我明白了。我的观点是,如果你想自动登录,你应该禁用 2FA。拥有 2FA 在这里没有任何意义。如果您担心安全性,那么您应该使用为您的测试目的量身定制的 GMail 帐户。
    猜你喜欢
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 2010-10-19
    • 2010-10-07
    • 1970-01-01
    • 2010-12-22
    相关资源
    最近更新 更多