2014-11-06 16 views
10

Bir Chrome Sürücüsü kullanıyorum ve bir web sayfasını test etmeye çalışıyorum.org.openqa.selenium.UnhandledAlertException: beklenmeyen uyarı açık

Normalde iyi çalışır ancak biraz zaman ben uyarısı işlemek için çalıştı Sonra

org.openqa.selenium.UnhandledAlertException: unexpected alert open 
(Session info: chrome=38.0.2125.111) 
(Driver info: chromedriver=2.9.248315,platform=Windows NT 6.1 x86) (WARNING: The server did not provide any stacktrace information) 
Command duration or timeout: 16 milliseconds: null 
Build info: version: '2.42.2', revision: '6a6995d', time: '2014-06-03 17:42:30' 
System info: host: 'Casper-PC', ip: '10.0.0.4', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.8.0_25' 
Driver info: org.openqa.selenium.chrome.ChromeDriver 

exceptions-- alır -

Alert alt = driver.switchTo().alert(); 
    alt.accept(); 

Ama bu sefer ben org.openqa recived-- .selenium.NoAlertPresentException

Uyarı - First Alert and by using esc or enter i gets the second alertSecond Alert

Şimdi ne yapacağımı anlayamıyorum. Sorun şu ki bu istisnayı her zaman almıyorum. Ve meydana geldiğinde, test başarısız olur.

+0

için çalıştığını takip etmek mi? Fxdriver.modals.clearFlag_ ... cf.'ye atlanan bir çağrı https: // stackoverflow.com/questions/44568402/how-do-i-manuel-fare-dismiss-a-javascript-uyarı-ve-geri-the-the-the-the-vücut-o/44592827 # 44592827 – NevilleDNZ

+0

Bu kök nedeni olabilir mi? Fxdriver.modals.clearFlag_ ... cf.'ye atlanan bir çağrı https://stackoverflow.com/questions/44568402/how-do-i-manually-mouse-dismiss-a-javascript-alert-and-get-back-the-the-body-o/44592827#44592827 – NevilleDNZ

cevap

13

Bu problemi de yaşadım. Bir uyarıyla karşılaştığında sürücünün varsayılan davranışı nedeniyle oldu. Varsayılan davranış "ACCEPT" olarak ayarlanmış, böylece uyarı otomatik olarak kapatılmıştır ve switchTo(). Alert() bulamadı.

DesiredCapabilities dc = new DesiredCapabilities(); 
dc.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.IGNORE); 
d = new FirefoxDriver(dc); 

O zaman işleyebilir:

try { 
    click(myButton); 
} catch (UnhandledAlertException f) { 
    try { 
     Alert alert = driver.switchTo().alert(); 
     String alertText = alert.getText(); 
     System.out.println("Alert data: " + alertText); 
     alert.accept(); 
    } catch (NoAlertPresentException e) { 
     e.printStackTrace(); 
    } 
} 
1

Anahtarınız bir deneme/yakalama bloğu içinde uyarılacak mı? Sen beklemek Selenyum WebDriver içinde Wait işlevini kullanabilirsiniz

public void acceptAlertIfAvailable(long timeout) 
     { 
     long waitForAlert= System.currentTimeMillis() + timeout; 
     boolean boolFound = false; 
     do 
     { 
      try 
      { 
      Alert alert = this.driver.switchTo().alert(); 
      if (alert != null) 
      { 
       alert.accept(); 
       boolFound = true; 
      } 
      } 
      catch (NoAlertPresentException ex) {} 
     } while ((System.currentTimeMillis() < waitForAlert) && (!boolFound)); 
     } 
+0

Evet ben try catch bloğu kullanıyorum –

+0

Uyarıyı bildirmek için anahtarı çevreleyen kod snippet'ini yayınlayabilir misiniz? – shri046

0

belirli bir gecikmeden sonra ortaya çıkarsa da görmek için bir bekleme zaman aşımı eklemek isteyebilirsiniz Bir uyarı için, ve uygun olduğunda kabul edin. C#

-

public static void HandleAlert(IWebDriver driver, WebDriverWait wait) 
{ 
    if (wait == null) 
    { 
     wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5)); 
    } 

    try 
    { 
     IAlert alert = wait.Until(drv => { 
      try 
      { 
       return drv.SwitchTo().Alert(); 
      } 
      catch (NoAlertPresentException) 
      { 
       return null; 
      } 
     }); 
     alert.Accept(); 
    } 
    catch (WebDriverTimeoutException) { /* Ignore */ } 
} 

Java Onun dengi -

public static void HandleAlert(WebDriver driver, WebDriverWait wait) { 
    if (wait == null) { 
     wait = new WebDriverWait(driver, 5); 
    } 

    try { 
     Alert alert = wait.Until(new ExpectedCondition<Alert>{ 
      return new ExpectedCondition<Alert>() { 
       @Override 
       public Alert apply(WebDriver driver) { 
       try { 
        return driver.switchTo().alert(); 
       } catch (NoAlertPresentException e) { 
        return null; 
       } 
       } 
      } 
     }); 
     alert.Accept(); 
    } catch (WebDriverTimeoutException) { /* Ignore */ } 
} 

bir uyarı mevcut hale gelmesi, 5 saniye bekler Eğer durum yakalamak ve eğer onunla başa çıkabilirim beklenen uyarı mevcut değil.

2

: uyarısı Bu pasajı deneyebilirsiniz

try { 
    // Add a wait timeout before this statement to make 
    // sure you are not checking for the alert too soon. 
    Alert alt = driver.switchTo().alert(); 
    alt.accept(); 
} catch(NoAlertPresentException noe) { 
    // No alert found on page, proceed with test. 
} 
0

click olayı sonrasında) (diğer şeyler driver.close yapmak ...

try{ 
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
     } 
catch (org.openqa.selenium.UnhandledAlertException e) {     
     Alert alert = driver.switchTo().alert(); 
     String alertText = alert.getText().trim(); 
     System.out.println("Alert data: "+ alertText); 
     alert.dismiss();} 

işlemek için kod aşağıda bu ekleyin;

0

çözüm uyarıyı kapatmak kalmaması, ("IGNORE") sürücüsünün varsayılan davranışını değiştirmek için

bu kök neden olabilir bana

private void acceptSecurityAlert() { 

    Wait<WebDriver> wait = new FluentWait<WebDriver>(driver).withTimeout(10, TimeUnit.SECONDS)   
                  .pollingEvery(3, TimeUnit.SECONDS)   
                  .ignoring(NoSuchElementException.class);  
    Alert alert = wait.until(new Function<WebDriver, Alert>() {  

     public Alert apply(WebDriver driver) { 

      try { 

       return driver.switchTo().alert(); 

      } catch(NoAlertPresentException e) { 

       return null; 
      } 
     } 
    }); 

    alert.accept(); 
}