2017-06-15 61 views
2

如何在浏览器警报/对话窗口中输入密码。它在加载url时显示。这不是一个基本的身份验证提示,而是一个密码提示,它会阻止与该页面的任何交互,直到输入密码。我正在和水豚一起使用硒红宝石。我曾尝试以下:在对话框/提示中输入密码

page.driver.browser.switch_to.alert.send_keys("Password") 

,但它不进入任何

Prompt screenshot

+0

那么你试过了什么? –

+0

尝试像这样,如果它是一个警报'Alert alert = driver.switchTo()。alert(); alert.sendKeys( “文本”); alert.accept();' –

+0

我已经更新了我迄今为止所尝试的问题,它与您建议的类似但未起作用 – Rahul

回答

2

如果你想填什么是JS window.prompt触发,则你可以处理它像

page.accept_prompt(with: "The text to fill in") do 
    page.click_button "Go" # whatever action triggers the prompt to appear 
end 

系统模式相反,如果它是一个系统身份验证模式(不是由JS打开的),那么你不能从Capybara访问它,如果你不能在URL中传递凭据,你将不得不使用一个完整的系统自动化工具,试图访问。

+0

怎么样使用一些JavaScript/jquery'page.execute_script(SIMULATE KEYPRESS)'? – fabersky

+0

谢谢托马斯。我没有意识到可以通过“with:”选项传递文本。它工作,但我没有看到填写的文本。我以前尝试过send_keys,这似乎也没有填写提示中的文本,这让我寻找另一种选择。这两个工作,但文字没有填写。无论如何,你建议的工作。 – Rahul

+1

@fabersky如果你指的是它不是由JS打开的系统模式,通常你打不开任何东西。 –

2

这可能会帮助你: -

字符串密码= URLEncoder.encode( “通行证”) ;

String UserName = URLEncoder.encode(“UserName”);

String url = String.format(“http://%s:%[email protected]”, UserName,Password);

在此%s是以参数的形式传递给url的变量。

你可以参考这个网址也https://serverfault.com/questions/371907/can-you-pass-user-pass-for-http-basic-authentication-in-url-parameters

+0

这个答案不是很有帮助,并没有回答这个问题。 –