Selenium Webdriverを使用してIEの基本認証ダイアログにユーザー名とパスワードを提供する方法はありますか? URL で資格情報を渡すことは、オプションではありません。
5982 次
3 に答える
3
この壮大な問題の解決策を手に入れました
awtを使用してください!!
URL を開き、次の java Robot クラスまたは SmartRobot クラスを使用します。
class SmartRobot extends Robot {
public SmartRobot() throws AWTException
{
super();
}
/*public void pressEnter()
{
keyPress(KeyEvent.VK_ENTER);
delay(50);
keyRelease(KeyEvent.VK_ENTER);
} */
public void pasteClipboard()
{
keyPress(KeyEvent.VK_CONTROL);
keyPress(KeyEvent.VK_V);
delay(50);
keyRelease(KeyEvent.VK_V);
keyRelease(KeyEvent.VK_CONTROL);
}
public void type(String text)
{
writeToClipboard(text);
pasteClipboard();
}
private void writeToClipboard(String s)
{
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable transferable = new StringSelection(s);
clipboard.setContents(transferable, null);
}
}
このクラスを次のように使用します....
try{
SmartRobot robot = new SmartRobot();
robot.type(username);
robot.keyPress(KeyEvent.VK_TAB);
robot.type(password);
robot.keyPress(KeyEvent.VK_ENTER);
}catch(Exception AWTException){
System.out.println("Exception " + AWTException.getMessage());
}
このソリューションは、AutoIt や Sikuli などのサードパーティ ツールを必要とせずに、魅力的に機能します。
于 2013-06-21T11:40:19.070 に答える
2
実際、Windows を使用していて、オートメーションの作成に Java 以外を使用している場合、AutoItX3 は非常に優れたオプションです。
AutoItX3.dll を Windows に登録する必要があります。
> regsvr32 AutoItX3.dll
そして、コードのどこかでインスタンス化します:
require 'win32ole'
@ai = ::WIN32OLE.new('AutoItX3.Control')
Ruby/Watir-webdriver の基本的な認証方法の例を次に示します。
def basic_auth(browser, user, pswd, url)
user_name, pass_word, login_button, login_title = get_basic_auth_control_indexes
a = Thread.new {
browser.goto(url)
}
if @ai.WinWait(login_title, "", 90) > 0
@ai.WinActivate(login_title)
@ai.ControlSend(login_title, '', "[CLASS:Edit; INSTANCE:#{user_name}]", '!u')
@ai.ControlSetText(login_title, '', "[CLASS:Edit; INSTANCE:#{user_name}]", @user)
@ai.ControlSetText(login_title, '', "[CLASS:Edit; INSTANCE:#{pass_word}]", @pass.gsub(/!/, '{!}'))
@ai.ControlClick(login_title, "", "[CLASS:Button; INSTANCE:#{login_button}]")
else
puts("Basic Auth Login window '#{login_title}' did not appear.")
end
a.join
end
サポートされている方法は次のとおりです。これは現在、Win XP および Win 7 の Chrome のみを認識しています。
def get_basic_auth_control_indexes
case $win_major
when '5' # XP
['2','3','1','Connect to']
when '6' # Win 7
['1','2','2','Windows Security']
end
end
もちろん、これは Windows 固有のものです。
def get_windows_version
ver = `ver`.gsub("\n", '')
mtch = ver.match(/(.*)\s\[Version\s*(\d+)\.(\d+)\.(\d+)\]/)
$win_name = mtch[1]
$win_major = mtch[2]
$win_minor = mtch[3]
$win_build = mtch[4]
$win_version = "#{$win_major}.#{$win_minor}.#{$win_build}"
end
于 2013-08-15T21:33:25.447 に答える