Я столкнулся с немного странной проблемой здесь. Весь мой скрипт зависает, когда открывается второе окно, нажав кнопку. Самая следующая строка после этого действия - 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: Прошу простить стиль кодирования, это просто попытка.
* но я сомневаюсь, что код даже доходит до этой точки * вы пытались с отладочной точкой в том месте, где вы добавили ручки окна и переключаете? – Nirmal
Я пробовал. Код не достигает каких-либо точек останова, которые я добавил после того, как // span [текст() = 'Продолжить']. Все, что я вижу в представлении Debug, - это 4 потока. 2 - Daemon, а другой - Thread 1 и еще один поток со стеком «Thread [Forwarding clickElement в сеансе a32e1c36-0fbe-404b-b009-4bd5aef3b7ed to remote] (Запуск) \t '. Вещи просто висят там, после этого ничего не происходит. – Amith
Нет никакой причины, по которой println не будет печатать. Я предполагаю, что оператор, нажав на continue, не сможет выполнить должным образом. Попробуйте выполнить печать до и переместите блок try прямо после нажатия кнопки continue. См. Пример здесь http://stackoverflow.com/questions/19112209/how-to-handle-the-new-window-in-selenium-webdriver – SK1