java - Selenium 脚本在弹出窗口打开时挂起,10 分钟后正常运行

标签 java selenium selenium-webdriver popup popupwindow

我遇到一个奇怪的问题,当我单击打开弹出窗口时,代码会卡住 10-12 分钟,然后与弹出窗口正常交互。完整代码如下:

System.setProperty("webdriver.chrome.driver", 
System.getProperty("user.dir")+ "\\exe\\chromedriver.exe");      
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(120, TimeUnit.SECONDS);
driver.get(prop.getProperty("https://genpact-qa-smartit.onbmc.com"));          
driver.findElement(By.xpath("//*[@id='okta-signin-username']")).sendKeys(userid);
driver.findElement(By.xpath("//*[@id='okta-signin-password']")).sendKeys(pwd);
driver.findElement(By.xpath("//*[@id='okta-signin-submit']")).click();
driver.findElement(By.xpath("//a[@id='header-search_button']")).click();
driver.findElement(By.xpath("//input[@id='globalSearchBox']")).sendKeys("CRQ000000029504");
Robot robot=new Robot();

robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
 driver.findElement(By.xpath("//a[text()='View Full Change']")).click();
 Thread.sleep(3000);
 driver.findElement(By.xpath("//div[@title='Print']")).click();
 Thread.sleep(3000);
Actions a = new Actions(driver);
a.moveToElement(driver.findElement(By.xpath("//button[contains(text(),'Print Change')]")));
a.click();
a.perform();
Set<String> window_handles=driver.getWindowHandles();
String child=null;
System.out.println(window_handles.size());
 for(String handle:window_handles) {
     child=handle;
 }
 driver.switchTo().window(child);

 JavascriptExecutor js = (JavascriptExecutor) driver; 
 WebElement print_button = (WebElement) js.executeScript("return document.querySelector('print-preview-app').shadowRoot.querySelector('#sidebar').shadowRoot.querySelector('#header').shadowRoot.querySelector('.action-button')");
 print_button.click();
 Thread.sleep(3000);
 StringSelection ss = new StringSelection("Filename");
 Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null); //copy the above string to clip board     

 robot.keyPress(KeyEvent.VK_CONTROL);
 robot.keyPress(KeyEvent.VK_V);
 robot.keyRelease(KeyEvent.VK_V);
 robot.keyRelease(KeyEvent.VK_CONTROL);
 robot.delay(2000);
 robot.keyPress(KeyEvent.VK_ENTER);
 robot.keyRelease(KeyEvent.VK_ENTER);

点击“打印更改”10-12 分钟并点击新弹出窗口上的“打印”按钮后,上述代码会卡住。

操作系统:Windows 10;浏览器:Chrome 77.0.3865.90; Selenium 3.141.59

如有任何帮助,我们将不胜感激。

问候, 投降

最佳答案

问题在于 window.showModalDialog() 使用 js 将其设置为 window.open。

 ((JavascriptExecutor) driver).executeScript("window.showModalDialog = window.open;");

或者

使用这个js点击,就可以解决问题了

 JavascriptExecutor js1 = (JavascriptExecutor) driver; 
 WebElement element = driver.findElement(By.xpath("//button[contains(text(),'Print Change')]"));
 js1.executeScript("var elem=arguments[0]; setTimeout(function() {elem.click();}, 100)", element);

关于java - Selenium 脚本在弹出窗口打开时挂起,10 分钟后正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58376666/

相关文章:

selenium-webdriver - 在 Protractor 中使用 chai-as-promised

python-3.x - 使用 GeckoDriverManager().install() 在 Firefox 中运行测试

java - 使用 Java 将测试结果传递给 Selenium 中的 ITestResult

Python - Firefox headless (headless)

javascript - 如何让 Protractor 的部分等待或同步?

java - 通过 Java 类声明 OUT 参数

java - 程序仅输出数组列表中的最后一个元素 - Java

java - 将 PgArray 或 java.sql.Array 转换为 Scala 集合

java - 如何绕过 fragment 类中的静态引用?

python - 启动 Selenium Chromedriver 时使用两个排除开关?