2017-01-17 29 views
2

OK、Seleniumを使用してファイルをエクスポートしようとしています。私のブラウザはIEです。エクスポートボタンをクリックすると、ネイティブウィンドウのダイアログボックスが表示されます。ポップのSeleniumを使用してIEでファイルをダウンロードします。

イメージアップ enter image description here

私は、[保存]ボタンをクリックする必要があります。このため私はAutoITを使ってみましたが動作しませんでした。

exportbutton.click(); 

    Thread.sleep(2000); 

    driver.switchTo().activeElement(); 

    AutoItX x = new AutoItX(); 
    x.winActivate("window name"); 
    x.winWaitActive("window name"); 

    x.controlClick("window name", "", "[CLASS:Button; INSTANCE:2]"); 

これは機能しませんでした。だから私はRobotクラスを使用して、キーボードのクリックAtl + Sを実行することに決めました。これにより、ブラウザはファイルを保存することができます。それはどちらもうまくいかなかった。

try 
    { 
     Robot robot = new Robot(); 
     robot.setAutoDelay(250); 
     robot.keyPress(KeyEvent.VK_ALT); 
     Thread.sleep(1000); 
     robot.keyPress(KeyEvent.VK_S); 
     robot.keyRelease(KeyEvent.VK_ALT); 
     robot.keyRelease(KeyEvent.VK_S); 
    } 
    catch (AWTException e) 
    { 
     e.printStackTrace(); 
    } 

私はexportbutton.click()後の行を印刷しようと、それはどちらか印刷されませんでしたので、私が思うのウェブドライバといくつかの問題があります。

私は新しいので、私は問題を理解することはできません。私を助けてください。

答えて

3

したがって、click()関数を呼び出すときにカーソルが時々止まることが問題でした。ソリューションとして、私はカーソルを移動してエクスポートボタンをクリックするためにRobotクラスを使用して、Robotクラスを使用してAlt + Sキーを押しました。これはIEでファイルを保存するキーボードショートカットです。私は次のコード

を使用し、私は次の行

Point coordinates = driver.findElement(By.id("id")).getLocation(); 
System.out.println("Co-ordinates"+coordinates); 

を使用し、Altキー+ SIを押して上記のスニペットの座標を取得するには

try 
{ 
    Robot robot = new Robot(); 
    Thread.sleep(2000); 
    robot.mouseMove(coordinates.getX()+100,coordinates.getY()-400); 
    Thread.sleep(2000); 
    robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); 
    robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); 
} 
catch (AWTException e) 
{ 
    e.printStackTrace(); 
} 

を使用ボタンをクリックし

try 
{ 
    Robot robot = new Robot(); 
    robot.setAutoDelay(250); 
    robot.keyPress(KeyEvent.VK_ALT); 
    Thread.sleep(1000); 
    robot.keyPress(KeyEvent.VK_S); 
    robot.keyRelease(KeyEvent.VK_ALT); 
    robot.keyRelease(KeyEvent.VK_S); 
} 
catch (AWTException e) 
{ 
    e.printStackTrace(); 
} 
0

申し訳ありませんが、ファイルをアップロードする方法を書いています。ダウンロードする場合は同じ方法を使用しますが、別のボタンを使用してください:Cntrl + Vの代わりにTabキーを使用してSave/Save asのコントロールを見つけ、Enterを押してください。その前に、文字列をファイルパス(ファイルをアップロードするディレクトリ)に貼り付けることができます。

+0

これは機能しません。私は私のドライバーにいくつかの問題があると思う。おそらくドライバーはまだ前のフレームで立ち往生していますか? – fatiqnadeem

+0

基本的にIEを使用することはできますか?現在のテストケースでは、FireFoxまたはChrome Driverを使用する必要がありますか? – Shroet

+0

できません。アプリケーションはIE上でのみ正しく動作します。 – fatiqnadeem

0

私は同じ問題を抱えていました。

button.click() 

は、この場合はうまく動作しません(IEドライバの場合)。ボタンをクリックする代わりに、私はこれを試しました:

robot = new Robot(); 
button.sendKeys(""""); 
robot.keyPress(KeyEvent.VK_ENTER); 
robot.keyRelease(KeyEvent.VK_ENTER); 

これはちょうどボタンに焦点を当て、それを押すことによってそれを押します。

0

自動ITではこれを処理する必要はありません。ちょうど以下のコードを使用し、それは正常に動作します。 element.clickを要素に渡すと、コントロールはそこで停止し、element.sendkeys( "")とrobot.keyPress(KeyEvent.VK_ENTER)を使用します。以下は

  • 完全なコードです:

      Robot robot = new Robot(); 
    

    //要素にフォーカスを取得します。..それは私がAutoItのを使用し、それがAutoItのスクリプト以下を参照してくださいウィンドウで10作品ドライバ

      element.sendKeys(""); 
    //simulate pressing enter    
          robot.keyPress(KeyEvent.VK_ENTER); 
          robot.keyRelease(KeyEvent.VK_ENTER); 
    //wait for the modal dialog to open    
          Thread.sleep(2000); 
    //press s key to save    
          robot.keyPress(KeyEvent.VK_ALT); 
          robot.keyPress(KeyEvent.VK_N); 
    
          robot.keyRelease(KeyEvent.VK_N); 
          robot.keyRelease(KeyEvent.VK_ALT); 
          Thread.sleep(2000); 
    //press enter to save the file with default name and in default location 
          robot.keyPress(KeyEvent.VK_TAB); 
          robot.keyRelease(KeyEvent.VK_TAB); 
    
          Thread.sleep(2000); 
    
          robot.keyPress(KeyEvent.VK_DOWN); 
          robot.keyRelease(KeyEvent.VK_DOWN); 
    
          Thread.sleep(2000); 
    
          robot.keyPress(KeyEvent.VK_DOWN); 
          robot.keyRelease(KeyEvent.VK_DOWN); 
    
          Thread.sleep(2000); 
    
          robot.keyPress(KeyEvent.VK_ENTER); 
          robot.keyRelease(KeyEvent.VK_ENTER); 
    
          Thread.sleep(2000); 
    
          robot.keyPress(KeyEvent.VK_ENTER); 
          robot.keyRelease(KeyEvent.VK_ENTER); 
    
0

をストールので、クリックし使用しないでください。

Sleep(9000); 
Local $hIE = WinGetHandle("[Class:IEFrame]"); 
Local $hCtrl = ControlGetHandle($hIE, "", "[ClassNN:DirectUIHWND1]"); 
If WinExists($hIE,"") Then 
     WinActivate($hIE,""); 
     ControlSend($hIE ,"",$hCtrl,"{F6}"); 
     Sleep(1500); 
     ControlSend($hIE ,"",$hCtrl,"{TAB}"); 
     Sleep(1500); 
     ControlSend($hIE ,"",$hCtrl,"{ENTER}"); 
    EndIf 
Sleep(5000); 
If WinExists($hIE,"") Then 
     WinActivate($hIE,""); 
     ControlSend($hIE ,"",$hCtrl,"{F6}"); 
     Sleep(1500); 
     ControlSend($hIE ,"",$hCtrl,"{TAB}"); 
     Sleep(1500); 
     ControlSend($hIE ,"",$hCtrl,"{TAB}"); 
     Sleep(1500); 
     ControlSend($hIE ,"",$hCtrl,"{TAB}"); 
     Sleep(1500); 
     ControlSend($hIE ,"",$hCtrl,"{ENTER}"); 
EndIf 
Sleep(5000); 

それは、保存ボタンをクリックし、次のアラートも閉じます。

enter image description here

応じSleep()を調整してください。

関連する問題