selenium - 如何 Selenium 测试使用 Google OAuth 的网站

标签 selenium oauth google-api

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

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

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

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

最佳答案

您可以创建允许不同权限的不同帐户。然后像真实用户一样简单地自动登录。
这是通过 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")))

关于selenium - 如何 Selenium 测试使用 Google OAuth 的网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36645400/

相关文章:

c# - 在 Chrome 中使用 selenium webdriver 在 google 搜索结果中查找搜索文本

android - 如何将访问 token 附加到 Google 表格 V4 请求?

c# - 无法使用 C# 在 Selenium WebDriver 中使用现有的 Firefox 配置文件

selenium - 如何将条件语句与 verifyElementPresent 一起使用

oauth - 可以在授权代码流 OAuth 中拦截访问 token 吗?

使用 OpenID 和 OAuth 的 youtube API(或 gdata API)的 c# 示例

ios - Google Sheet API批量更新问题iOS

youtube - 使用pageToken时,YouTube API v3返回400错误

javascript - 使用 Python 3.7 检查 HTML 页面中的复选框

oauth - 为什么 OAuth 2.0 规范禁止重复使用授权代码?