2015-04-14 2 views
0

Я столкнулся с немного странной проблемой здесь. Весь мой скрипт зависает, когда открывается второе окно, нажав кнопку. Самая следующая строка после этого действия - System.out.println();, и она даже не печатает это на консоли, пока я не закрою окно вручную. Я добавил логику для получения оконных ручек и переключения, но я сомневаюсь, что код даже доходит до этой точки. Пожалуйста, найдите код ниже.Selenium Java-код зависает после открытия второго окна

import java.util.Set; 
import java.util.concurrent.TimeUnit; 
import org.openqa.selenium.Alert; 
import org.openqa.selenium.By; 
import org.openqa.selenium.Keys; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.ie.InternetExplorerDriver; 
import org.openqa.selenium.ie.InternetExplorerDriverService; 
import org.openqa.selenium.Keys; 
import java.util.Iterator; 

public class ACHClearTransfer { 
public static void main(String[] args){ 
System.setProperty("webdriver.ie.driver","C:/Progra~1/IEDriverServer.exe"); 
    System.setProperty("webdriver.ie.driver.extractpath", "C://Progra~1"); 
    WebDriver driver = new InternetExplorerDriver(); 
    try{ 
     driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 
     driver.get("https://XXXXXXXX.com"); 
     Thread.sleep(3000); 
     String parentWindowHandler = driver.getWindowHandle(); 
     System.out.println("parent window handler is "+parentWindowHandler); 
     driver.findElement(By.xpath("//input[@type='text' and @name='tbUsername']")).sendKeys("********"); 
     driver.findElement(By.xpath("//input[@type='password' and @name='tbPassword']")).sendKeys("*******"); 
     System.out.println("Entered ID and password"); 
     driver.findElement(By.xpath("//span[text()='Log in']")).click(); 
     driver.findElement(By.xpath("//input[@type='password' and @name='challengeAnswer']")).sendKeys("*******"); 
     driver.findElement(By.xpath("//span[text()='Continue']")).click(); 
     System.out.println("Continue button clicked"); 
     Thread.sleep(5000); 
     System.out.println("Thread sleep completed."); 
     String subWindowHandler = null; 
     try{ 
      System.out.println("Inside try"); 
      Set<String> handles = driver.getWindowHandles(); // get all window handles 
      System.out.println("All window handles "+handles); 

      for(String handle:handles){ 
       if(!parentWindowHandler.equals(handle)){ 
        subWindowHandler = handle; 
       } 
      }     
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 

     driver.switchTo().window(subWindowHandler); 
     System.out.println(driver.getTitle()); 
     driver.close(); 
     Thread.sleep(2000); 

     driver.switchTo().window(parentWindowHandler); 
     System.out.println("Back in parent window"); 
     System.out.println(driver.getTitle()); 
     Thread.sleep(2000); 

     driver.findElement(By.xpath(".//*[@id='navAcc']/a")).click(); 
     driver.findElement(By.xpath(".//*[@id='portfolioDepositsScheduledTransfers']/a")).click(); 

     boolean temp = driver.findElement(By.xpath("(//a[text()='Delete'])[1]")).isDisplayed(); 

     while(temp==true){ 
      driver.findElement(By.xpath("(//a[text()='Delete'])[1]")).click(); 
      Thread.sleep(2000); 
      temp = driver.findElement(By.xpath("(//a[text()='Delete'])[1]")).isDisplayed(); 

     } 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 
    finally{ 
     driver.quit(); 
    } 
} 
} 

Проблема возникает после нажатия кнопки «Продолжить». Это откроет новое окно. Следующий System.out.println("Continue button clicked") не отображается на консоли, пока я не закрою окно вручную. Пожалуйста помоги.

PS: Прошу простить стиль кодирования, это просто попытка.

+0

* но я сомневаюсь, что код даже доходит до этой точки * вы пытались с отладочной точкой в ​​том месте, где вы добавили ручки окна и переключаете? – Nirmal

+0

Я пробовал. Код не достигает каких-либо точек останова, которые я добавил после того, как // span [текст() = 'Продолжить']. Все, что я вижу в представлении Debug, - это 4 потока. 2 - Daemon, а другой - Thread 1 и еще один поток со стеком «Thread [Forwarding clickElement в сеансе a32e1c36-0fbe-404b-b009-4bd5aef3b7ed to remote] (Запуск) \t '. Вещи просто висят там, после этого ничего не происходит. – Amith

+0

Нет никакой причины, по которой println не будет печатать. Я предполагаю, что оператор, нажав на continue, не сможет выполнить должным образом. Попробуйте выполнить печать до и переместите блок try прямо после нажатия кнопки continue. См. Пример здесь http://stackoverflow.com/questions/19112209/how-to-handle-the-new-window-in-selenium-webdriver – SK1

ответ

0

Это старая тема, но, пожалуйста, проверьте версию IEDriverServer, поскольку в старых версиях возникли проблемы при управлении модальными диалоговыми окнами (некоторые проблемы были исправлены из версии 2.38, см. В журнале изменений). Вероятно, это помогло бы, у меня была аналогичная проблема, и обновление версии решило проблему.

 Смежные вопросы

  • Нет связанных вопросов^_^