如果我以编程方式创建Facebook 测试用户,login_url则新用户的 不起作用。获取 login_url 会返回 404 错误。
精简示例(在 Python 中)。最后两行是问题出现的地方:
import requests
from urlparse import parse_qs
APP_ID = "<Facebook App ID>"
APP_SECRET = "<Facebook Client Secret>"
# Get app access token - this works
response = requests.get('https://graph.facebook.com/oauth/access_token',
params={'grant_type': "client_credentials",
'client_id': APP_ID, 'client_secret': APP_SECRET})
app_access_token = parse_qs(response.content)['access_token'][0]
# Create test user - this works
response = requests.post('https://graph.facebook.com/%s/accounts/test-users' % APP_ID,
data={'access_token': app_access_token, 'installed': "true"})
test_user = response.json()
login_url = test_user['login_url']
print login_url # http://developers.facebook.com/checkpoint/test-user-login/...
# Get cookied for login - see https://stackoverflow.com/a/5370869/647002
session = requests.Session()
session.get("https://www.facebook.com/", allow_redirects=True)
# Login test user - THIS FAILS
response = session.get(login_url)
print response.status_code # 404
其他人指出,您必须先获取 Facebook 主页,然后测试用户的 login_url 才能工作。我们遇到了同样的问题,我已经在上面包含了这个解决方法,但没有任何运气。[编辑:添加了_fb_noscript=1查询参数,从 2015 年中期开始,非 JavaScript 测试客户端需要。] [编辑 8/2017:现已删除_fb_noscript=1;不再需要,并设置一个noscriptcookie,使一些以后的 FB 身份验证请求返回 500。]
我还尝试直接在浏览器中打开 login_url:
- 如果我还没有登录 Facebook,我会得到一个通用的 Facebook 404 页面。
- 如果我已经登录到我的开发者帐户,Facebook 会警告我将以平台测试用户的身份登录,然后允许我进入测试用户的帐户。
最后一点似乎证实了测试用户被正确创建并且我有正确的 login_url。但当然,这对自动化测试没有帮助。(我们不想运行登录到我的开发者帐户的测试。)
测试用户的 login_url 是否有其他方式用于自动化测试?