【问题标题】:How to enter password in a popup using watir?如何使用 watir 在弹出窗口中输入密码?
【发布时间】:2012-09-24 11:41:12
【问题描述】:

我正在写一些 watir 测试用例:

browser.goto "http://egauge2592.egaug.es/"
browser.link(:href,"/settings.html").click
browser.text_field(:index,4).set("some text")
browser.button(:id,"save_button").click

然后会打开一个“需要身份验证”对话框,询问用户名和密码。

无论我如何尝试,我都无法访问文本字段。

我尝试了send_keys 和 JavaScript。

我也尝试了Watir.autoit,但它说的是未定义的方法。

我在装有 FireFox 浏览器的 Ubuntu 机器上使用 watir。

如何填写该对话框的用户名和密码字段? 我可以使用 browser.alert.set 输入用户名,但只能设置用户名无法访问密码字段。

【问题讨论】:

  • 可以发一下弹窗的截图吗?
  • 这是一个浏览器弹出窗口。当页面需要摘要身份验证时,浏览器会自动要求提供凭据。弹出窗口是一样的。
  • 我也尝试过使用 browser.window(:title) 方法,但它无法识别任何 watir 方法(text_field)。还尝试在该站点之前使用 username:password@ 进行身份验证,但没有成功
  • 你试过Alister Scott's blog的建议了吗?
  • 是的,我读过它,但我需要在没有任何 UI 的服务器上的无头浏览器上测试我的案例。那么我怎样才能使用那里的插件呢??

标签: ruby watir watir-webdriver headless xserver


【解决方案1】:

我最近写了一个firefox插件来处理这个问题。我没有用 headless Firefox 尝试过,但它可能会工作......值得一试。详情请看以下内容:

http://www.natontesting.com/2012/10/06/firefox-plugin-test-automation-password-manager/

要让它与 watir 一起工作,请尝试以下操作:

browser = Watir::Browser.new
#go to a page that won't bring up the authentication dialog...
browser.goto 'http://www.google.co.uk'

#prepare the script...
pass_man_update_script = <<-SCRIPT
var addCredentialsEvent = new CustomEvent("add_credentials_to_passman", {
  detail: {
    host: 'http://secure.example.com',
    username: 'bob',
    password: 'P45sword'
  }
});
window.dispatchEvent(addCredentialsEvent);
SCRIPT

#inject the script into the browser:
browser.execute_script pass_man_update_script

#go to the page that prompts the dialog box...
browser.goto "http://secure.example.com"
#you should now be past the dialog box!

【讨论】:

  • 是的,我之前尝试过您的解决方案,但我无法为 watir 编写相关代码,而且我对 selenium 没有那么有经验
  • 刚刚更新了问题,详细介绍了如何将插件与 watir 一起使用
  • 使用/不使用该代码无法正常工作,需要不同的代码来加载插件以供 watir
  • 上面的代码假设插件已经加载了......请参阅这个问题的答案以了解如何做到这一点:stackoverflow.com/a/6564780/275673
  • 这不起作用,uname 的警报仍然会弹出,并且设置未保存,我可以通过 browser.alert.set 设置 uname 字段,但无法访问密码字段
【解决方案2】:

我改用 watir-webdriver,这个 (http://watirwebdriver.com/basic-browser-authentication/) 对我有用。

【讨论】:

  • 不行,因为我在无头模式下使用浏览器,我不知道如何在无头模式下设置配置文件
  • 假设您的网站使用“基本 http 身份验证”(并且您的描述听起来像是),这个技巧应该在无头模式下工作。你真的试过了吗?它与个人资料无关。
【解决方案3】:

只需将您的基本身份验证凭据放在网址中即可:

browser.goto "http://user:pass@egauge2592.egaug.es/"

【讨论】:

  • 它是一种摘要式身份验证,因此它不起作用。顺便说一句,我也尝试过,正如上面评论中提到的那样
  • 它应该与摘要身份验证一起正常工作。仔细检查用户名/密码。
  • @pguardiario 它适用于摘要身份验证的情况。但是,在我们的例子中,问题是服务需要realm 字符串,同时将用户名和密码编码在一起。知道如何在 URL 本身中提供它吗?
  • 浏览器会收到一个身份验证请求,包括领域和可能的随机数等。您无需担心。通过在 url 中发送凭据,浏览器将自动发送适当的凭据,包括适当时包含领域的散列密码(在摘要身份验证的情况下)
  • 不,身份验证响应发送领域,浏览器自动将其发送回来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
相关资源
最近更新 更多