【发布时间】:2015-04-14 16:58:41
【问题描述】:
我在这里遇到了一个奇怪的问题。当通过单击按钮打开第二个窗口时,我的整个脚本会挂起。此操作之后的下一行是System.out.println();,它甚至不会在控制台中打印它,直到我手动关闭窗口。我已经添加了获取窗口句柄和切换的逻辑,但我怀疑代码是否达到了这一点。请在下面找到代码。
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:请原谅编码风格,这只是一个尝试。
【问题讨论】:
-
但我怀疑代码是否达到了这一点您是否尝试在添加窗口句柄和切换的位置使用调试点?
-
我试过了。代码没有达到我在 //span[text()='Continue'] 按钮之后添加的任何断点。我在 Debug 视图中只能看到 4 个线程正在运行。 2 是守护进程,另一个是线程 1 和另一个线程,堆栈为 'Thread [Forwarding clickElement on session a32e1c36-0fbe-404b-b009-4bd5aef3b7ed to remote] (Running) '。事情就这样挂在那里,之后什么都没有发生。
-
println 没有理由不打印。我的猜测是单击 continue 的语句无法正确执行。尝试打印之前并在单击继续后立即移动您的尝试块。请参见此处的示例stackoverflow.com/questions/19112209/…
-
没有变化。在单击继续之前我打印的任何内容都可以正常工作,之后就没有了。
-
我试图了解当您手动执行编码时会发生什么。输入登录凭据并单击继续后,会打开一个弹出窗口吗?您是说“单击继续按钮”没有打印到控制台。对吗?
标签: java selenium selenium-webdriver window-handles