当前位置: 首页 > 知识库问答 >
问题:

SeleniumJava处理对象(警报对话框)异常而不延迟。(不可预测的Java弹出)

马俊
2023-03-14

目标:弹出警报。无论它是否显示,我希望它继续。如果显示,则必须选中复选框,然后单击“继续”。如果没有,忽略它。

拦截器:如果警告显示,它将处理的行动和对话将被关闭。但当它不是,硒挂在那里,没有处理条件,当它不显示。

背景:我以前使用过UFT,也许我的逻辑可能是错误的。弹出窗口是应用程序警报(不是系统),因此假设“切换到(),accept()/dismise()将不起作用。我将在登录后立即在下面的登录方法中添加句柄警报。

硒框架背景。:我们使用硒纤维框架,宁静BDD。对象设置在页面的开头。和 serenity.properties 处理超时默认值,依此类推。

弹出对象(如果出现):

@FindBy(xpath = "//input[@id='notification-ack']")
private WebElement PcoNoticeChbx; //this is a check box, needs to be checked
@FindBy(xpath = "//button[contains(.,'Continue')]")
private WebElement PcoNoticeContinueBtn;//button to close the alert

*登录方法*

 public void loginIntoExtApplication(String baseURL, String loginURL, String uId, String pwd, String extAppEnv)throws Exception {
            gotoExtLoginPage(baseURL, loginURL);         
            enterLoginCredential(uId, pwd);
     openAt("https://" + extAppEnv + ".programportaltest.hrsa.gov/sdms-
    extranet/index.xhtml");

我的方法:

//1.

     if (PcoNoticeChbx!=null) {
            PcoNoticeChbx.click();
            PcoNoticeContinueBtn.click();
        } else {
            System.out.println("Dialog didn't display, no need any action");
        }

//2.登录操作后挂在此处。

     if(!getDriver().findElements(By.xpath("//*[@id='submit']")).isEmpty()){
                 PcoNoticeChbx.click();
                 PcoNoticeContinueBtn.click();
            } 
             else {  
                System.out.println("Dialog didn't display, no need any action");
            } 

3.添加到监视不起作用,它显示挂起,下面的代码也失败。我在调试模式下在 Junit 中运行了我的 Maven。它曾经工作正常。但观看元素始终显示(待定)。

     boolean isPresent = getDriver().findElements(By.id("noticebox")).size() >0  
      System.out.println("the diaolog exist=  " + isPresent);

//4.甚至试过试抓法。

try{    
             PcoNoticeChbx.click();
             PcoNoticeContinueBtn.click(); 
         }catch (Exception e){ 
            // Printing logs for my report 
             Log.error("Report Category button element is not found."); 

            // After doing my work, now i want to stop my test case 
             throw(e); 
         } 
    return;
     }  

//5.尝试列出webelemets:

List temp=webdriver.findElements(org.openqa.selenium.By.id(“noticebox”);

    if (temp.Count > 0 && temp[0].Displayed) {
                    // script to execute if element is found
                } else {
                    //  continue the test
         }  

6.及以下

if (!WebDriver.findElements(By.xpath("//*[@id='submit']")).isEmpty()==true);


        {
                //handle the dialog 
            }  
            else{   
                //continue 
            }

7.尝试使用布尔值,但它也挂起在这里的第一步

boolean Nbox = PcoNoticeChbx.isDisplayed(); {




    if (Nbox==false)
               {
             System.out.println("Dialog didn't display, no need any action");
               } 
             else if (Nbox==true) {
             PcoNoticeChbx.click() ;
             PcoNoticeContinueBtn.click();  
             }

共有2个答案

拓拔烨赫
2023-03-14

为我的情况找到了解决方案。

这可能很容易。但是我需要一些时间去研究。希望对你有帮助。

在使用了许多方法之后,对于这个javascript确认警报。我使用了下面的方法。所有的帮助。电流可见()方法。因为这个,我想只有这个会给你结果,即使元素不存在或为空。

if (element(NoticeContinueBtn).**isCurrentlyVisible**()==true) {

    PcoNoticeChbx.click();
    PcoNoticeContinueBtn.click();
    //else just continue
}
吕承望
2023-03-14

如果这就像我处理过的弹出窗口一样,它们的工作方式是这样的:

  1. 客户来到站点,站点检查是否存在cookie。如果该cookie存在,则永远不会启动弹出窗口(理想状态)。如果该cookie不存在(典型状态),则在指定时间段后会出现弹出窗口。
  2. 客户拒绝弹出窗口并创建一个具有过期时间的cookie
  3. 一旦过期时间过去,cookie过期,弹出窗口将再次触发

您需要进行一些调查,并找到弹出窗口关闭后创建的cookie。清除缓存,浏览到网站,并记下存在的所有 Cookie。等待弹出窗口并将其关闭。现在找到刚刚创建的 Cookie 并对其进行检查。这是您需要创建的 Cookie。有很多关于创建cookie的教程。这很简单。

一旦您了解了如何创建cookie,您就可以将其添加到您的脚本中,如下所述:

  1. 导航到域上已知不存在的某个页面,例如 www.domain.com/some404page。我们这样做是因为它不会触发弹出倒计时,我们需要在域上才能创建cookie。
  2. 创建饼干
  3. 做正常的测试

没有更多的弹出窗口。

 类似资料:
  • 问题内容: Java noob在这里。当用户按下Windows关闭按钮时,扩展的Swing类不会处理- java.exe保留在内存中。我已经将代码剥离到了这个shell上,但我仍然可以做到这一点。 我看了其他示例,例如Basic Java Swing,如何退出和处置您的应用程序/JFrame。 当我注释掉该示例代码中的两行时,该示例中的类仍然正确处理。我想让我的班级丢掉什么? 问题答案: 您正在创

  • 我面临一个问题,其中我得到一个异常说UnhandledAlertException模态对话框存在,下面是一些痕迹 组织。openqa。硒。未处理的AlertException:存在模式对话框:此页面要求您确认是否要离开-您输入的数据可能不会保存。构建信息:版本:“2.41.0”,版本:“3192D8A6C4449DC285928BA02479344F5423C58”,时间:“2014-03-27

  • 我正在使用新的JavaFX Alert类(Java1.8_40),并尝试在exibition文本中使用HTML标记,但到目前为止还没有成功。下面是我正在尝试做的一个例子。 有没有人知道这是不是真的可能,给我举个例子? 提前道谢。

  • 我在antoher的项目中有完全相同的代码,但它在这里继续崩溃。我有。我真的不确定问题出在哪里。我尝试过切换gradle版本,从切换到。不管怎样,一切都失败了

  • 我停电了,打开Android Studio后,我每次打开Android Studio都会出现这个错误,我的文件——它们都受到this.how的影响来修复它? 无法执行aapt