1

Windows認証を使用してユーザーの資格情報を検証し、複数のアカウントをテストする必要があるInternet Explorer経由でのみアクセスできる内部Webサイトをテストしているため、別の人としてWebサイトに「ログイン」できる必要があります(私は以前は、複数のマシンをそれぞれ関連するアカウントとしてログインさせることを検討していましたが、これを行うことはできません)。

webdriver アカウントとしてこのページにアクセスすると、標準の Internet Explorer の "Windows Security" ポップアップが表示され、ログインの詳細を問題なく入力できます。これまでのところ唯一の問題は、webdriver がポップアップを認識しないことです。

Java Robot クラスを使用してこれを行うことができると思い、Selenium webdriver スクリプトにプラグインすることがわかったコードをいくつか切り取ったところ、ほとんど機能します。問題は、表示されたログイン ウィンドウを手動でクリックしてコピーする場合にのみ機能することです。詳細を貼り付けます (以下のコードを参照)。コピーして貼り付ける前に、Selenium またはロボットを使用してこのオブジェクトにフォーカスを設定する方法について何か提案はありますか?

public Boolean loginDetails(individualThreadSession threadSesh){
        Action myAction = new Action();
        final String USERNAME= "loginID";
        final String PASSWORD= "myPassword";
        myAction.simpleWait(1);

        Robot robot = null;
        try {
            robot = new Robot();
        } catch (AWTException e) {e.printStackTrace();}

        type(robot, USERNAME);
        myAction.simpleWait(1);
        robot.keyPress(KeyEvent.VK_TAB);
        myAction.simpleWait(1);
        robot.keyRelease(KeyEvent.VK_TAB);

        myAction.simpleWait(1);

        type(robot, PASSWORD);
        myAction.simpleWait(1);
        robot.keyPress(KeyEvent.VK_ENTER);
        myAction.simpleWait(1);
        robot.keyRelease(KeyEvent.VK_ENTER);
        myAction.simpleWait(1);

        return(true);
    }

    public static void type(Robot robot, String characters) {
        Action myAction = new Action(); 
        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        StringSelection stringSelection = new StringSelection( characters );
        clipboard.setContents(stringSelection, null);

        robot.keyPress(KeyEvent.VK_CONTROL);
        myAction.simpleWait(1);
        robot.keyPress(KeyEvent.VK_V);
        myAction.simpleWait(1);
        robot.keyRelease(KeyEvent.VK_V);
        myAction.simpleWait(1);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        myAction.simpleWait(1);
    }

情報をコピーして貼り付けるのではなく、個々のキーストロークを入力することも試みましたが、それも機能します。機能する前に画面にフォーカスを与える必要があります... :S

これも試しましたが、まだWindowsセキュリティダイアログにフォーカスを設定していません...

Alert aa = threadSesh.driver.switchTo().alert();
aa.sendKeys(USERNAME);
4

2 に答える 2

1

次のコードで、autoitを使用してスタンドアロンexeを作成することができました(作成およびコンパイルするソフトウェアはもっと良いかもしれませんが、無料なので文句は言えません)。

Func _WinWaitActivate($title,$text,$timeout=100) WinWait($title,$text,$timeout) If Not WinActive($title,$text) Then WinActivate($title,$text) WinWaitActive($title,$ text,$timeout) EndFunc

_WinWaitActivate("Windows Security","")
Send("myloginID{TAB}mypassword{ENTER}")

次に、ポップアップを表示するページに移動したら、コード内で次のように呼び出します。

try {
    Runtime.getRuntime().exec("C:\\test\\test.exe");
} catch (IOException e) {
    e.printStackTrace();
}

そしてちょっとプレスト!ログインが表示された瞬間に、ログインの詳細が入力されます... とりあえずやらなければならないことだと思います! :)

于 2013-09-20T11:36:28.600 に答える
1

これは、認証ウィンドウにフォーカスがないためです。別のウィンドウではないため、Robot で ALT+TAB を試すことはできません。あなたのシナリオでは、「AutoIT」が適切なソリューションになると思います。AutoIT を使用したい場合は、サンプル コードを送信できることをお知らせください。

import java.io.Serializable;
import com.sun.jna.WString;

public interface AutoITX extends com.sun.jna.Library, Serializable {

public static int AU3_INTDEFAULT = -2147483647;

public int AU3_WinWaitActive(WString szTitle, WString szText, int nTimeout);

    }

objAutoIT などの AutoITX 用のオブジェクトを作成します。以下のパラメータで WinWaitActivate() を呼び出します。要件に応じて、windowTitle、windowText (空にすることができます)、waitTime を置き換えます。

    objAutoIT.AU3_WinWaitActive(WString(windowTitle), WString(windowText), waitTimeInSecs);
于 2013-09-20T09:27:50.060 に答える