繁体   English   中英

如何接受不同窗口中出现的硒警报?

[英]How to accept alert in selenium which is coming up in a different window?

场景:有2个窗口打开。 当我单击第二个窗口上的按钮时,第三个窗口正在打开,焦点自动移至第三个窗口。 将在第三个窗口上发出警报以接受。

问题:由于警报来自其他窗口,因此我无法接受。

调查结果:我认为这是硒的局限性。 如果警报位于单击按钮的同一窗口中,则我们具有DOM,因此我们能够与警报进行交互。 但是在这种情况下,警报位于另一个窗口中,因此浏览器的状态被锁定。

尝试过的解决方案:通过使用javascript,硒行动类等尝试了所有可能的方法,但是它不起作用。

一些尝试的方法如下

//e.click();
                        /*Actions ac = new Actions(driver);

                        ac.sendKeys(Keys.ENTER).build().perform();*/
                        String onClickScript = "if(document.createEvent){var evObj = document.createEvent('MouseEvents');evObj.initEvent('click', true, false); arguments[0].dispatchEvent(evObj);} else if(document.createEventObject){ arguments[0].fireEvent('onclick');}";
                        JavascriptExecutor jse = (JavascriptExecutor)driver;
                        jse.executeScript(onClickScript, e);

                    /*  Actions asd = new Actions(driver);
                        asd.clickAndHold(e).perform();
                        Thread.sleep(1000);
                        asd.release().perform();*/

为了消除某些疑问, 警报是通过JavaScript生成的,并且绝不是HTML DOM的一部分。

接受关闭 警报,您必须始终诱使WebDriverWait使警报出现 ,如下所示:

import org.openqa.selenium.Alert;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
//other code
Alert myAlert = new WebDriverWait(driver, 10).until(ExpectedConditions.alertIsPresent());
//accept an alert
myAlert.accept();
//dismiss an alert
myAlert.dismiss();

下面的解决方案工作正常,可以在类似的情况下使用。

我们必须使用java.awt包的Robot类。 在下面的代码中,Alt + space + c将关闭所有打开的窗口。 在这里关闭警报。

public void closeAlert(String strControlName, String delayTime) {
    Robot rb;
    int timeInSec = Integer.parseInt(delayTime);
    try {
        rb = new Robot();
        rb.keyPress(KeyEvent.VK_ENTER); //for clicking on the button or link
        rb.keyRelease(KeyEvent.VK_ENTER);
        Log.info("Wait for "+timeInSec+" Secs");
        Thread.sleep(timeInSec*1000);
        rb.keyPress(KeyEvent.VK_ALT); 
        rb.keyPress(KeyEvent.VK_SPACE);
        rb.keyPress(KeyEvent.VK_C);
        rb.keyRelease(KeyEvent.VK_C);
        rb.keyRelease(KeyEvent.VK_SPACE);
        rb.keyRelease(KeyEvent.VK_ALT); 
        Log.info("Successfully clicked on '"+strControlName+ "' and closed the Alert");
    } catch (Exception e) {
        Log.info("Failed click on '"+strControlName+ "' and close the Alert");
    }


}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM