5

アラート、確認、プロンプト ダイアログなどのポップアップについては話していません。アプリケーションでボタンをクリックすると、ポップアップが開きます。WebDriver をポップアップ ウィンドウに切り替えることができません。

getWindowHandles() を使用しようとしましたが、メイン ウィンドウ ハンドルしか返されません。

switchTo.window("windowname") も試しましたが、うまくいきませんでした。

4

5 に答える 5

5

通常、モジュラーウィンドウは、JavaScriptアラートとは異なり、同じDOMの一部です。それらをページの他の部分と区別する唯一のことは、それらが異なるフレームにあるということです。

このモジュラーウィンドウがフレームまたはiframeタグ内にあるかどうかを確認してください。親のいずれかがフレームまたはiframeの場合、モーダルウィンドウでアクションを実行する前に、コンテキストをそのフレームに変更する必要があります。

したがって、フレームを見つけてdriver.switchTo().frame()実行し、目的の要素に対してアクションを実行します。アクションが完了すると、おそらくメインページに戻ります。driver.switchTo().defaultContent()メインページにフォーカスを戻すために使用します。

このSOの質問は役に立ちます。

これが機能しない場合は、ページまたはそのHTMLを確認すると便利です。

于 2013-01-10T11:26:59.440 に答える
3
//handle of the master window before clicking the link
String master = driver.getWindowHandle();

driver.findElement(By.linkText("Click me")).click();

//logic for waiting for the popup, checking the size to become greater than 1 or breaking after sometime to avoid the infinite loop.
int timeCount = 1;

do
{
   driver.getWindowHandles();
   Thread.sleep(200);
   timeCount++;
   if ( timeCount > 50 ) 
   {
       break;
   }
}
while ( driver.getWindowHandles().size == 1 );

//Assigning the handles to a set
Set<String> handles = driver.getWindowHandles();
//Switching to the popup window.
for ( String handle : handles )
{
    if(!handle.equals(master))
    {
         driver.switchTo().window(handle);
    }
}
于 2013-02-17T15:14:59.187 に答える
1

ページオブジェクトを使用していますか?

これを使用している場合、最初にページを開いたときに要素が表示されていない場合、initElements は要素を初期化しないため、ポップアップが表示された後に要素を見つける必要があります。

于 2013-01-07T11:16:00.690 に答える
0

webdriver によると、この問題は 2.16 で修正されていますが、それでも機能しません window.ShowmodalDialog のサポート

このようなケースを処理するには、 Java Robot クラスを使用できます。

例 :

Wait(5000); // Wait for model pop, 
    int keyInput[] =
    {
      KeyEvent.VK_S, KeyEvent.VK_E, KeyEvent.VK_L, KeyEvent.VK_E,
      KeyEvent.VK_N, KeyEvent.VK_I, KeyEvent.VK_U, KeyEvent.VK_M,
    };   

    Robot robot = new Robot();

    robot.keyPress(KeyEvent.VK_TAB);
    robot.keyPress(KeyEvent.VK_TAB);


    for (int i = 0; i < keyInput.length; i++)
    {    
      robot.keyPress(keyInput[i]);
      robot.delay(100);    
    }  

    robot.delay(1000); 
    robot.keyPress(KeyEvent.VK_TAB);
    robot.delay(1000);
    robot.keyPress(KeyEvent.VK_TAB);
    robot.delay(1000);
    robot.keyPress(KeyEvent.VK_TAB);

    robot.delay(1000);
    robot.keyPress(KeyEvent.VK_ENTER); // Save Btn 

イベント間の遅延が必要です。そうしないと、イベントを見逃すことになります。

于 2013-01-11T06:35:30.083 に答える
0

JavaScriptアラートについて話していると仮定します。

final Alert a = driver.switchTo().alert(); 
a.accept(); 

また

JavaScript を直接実行して変更を処理する

アラートが表示されるのを待つかもしれません

于 2013-01-10T04:35:12.060 に答える