簡體   English   中英

無法在Selenium WebDriver中處理Ajax彈出窗口

[英]Unable to Handle Ajax Pop up in Selenium WebDriver

我是Selenium的新人。 我正在嘗試在MacDonald登錄和訂單的selenium中創建腳本。但是在登錄后我無法點擊繼續,任何其他選項請幫助我。

我的代碼是: -

WebDriver selenium= new FirefoxDriver();
selenium.manage().window().maximize();

String baseurl = "http://www.mcdelivery.co.in/";
selenium.get(baseurl);

Thread.sleep(2000); 
Thread.sleep(5000);

WebElement loginbtn = selenium.findElement(By.id("lnkBtnLogin"));
if(loginbtn.isDisplayed()) {
    loginbtn.click();
}

WebElement username = selenium.findElement(By.id("txtMobileNumber"));
if(username.isDisplayed()) {
    username.clear();
    username.sendKeys("******");
}

WebElement pwd = selenium.findElement(By.id("txtMsgPwd"));
if(pwd.isDisplayed()) {
    pwd.sendKeys("******");
}

WebElement submit = selenium.findElement(By.id("btnSubmit"));
if(submit.isDisplayed()) {
    submit.click(); 
    //Alert aler = selenium.switchTo().alert().accept();
    selenium.switchTo().activeElement();         
}

WebElement conti = selenium.findElement(By.id("btnContinue"));
if(conti.isDisplayed()) {
    conti.click();
}

// selenium.close();

運行此后我得到錯誤

Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element: 
{"method":"id","selector":"btnContinue"}
Command duration or timeout: 31 milliseconds

由於“ 繼續”按鈕是彈出窗口的一部分(需要一些時間來加載),因此您需要花一些時間讓webdriver檢測它。 為此,使用Implicit / Explicit等待給出超時。

對於上面,你可以像這樣使用頂部的隱式超時 ;

selenium.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

每次嘗試定位元素時,上面給webdriver一個15秒的時間。

此外,在此代碼中,

if(conti.isDisplayed())

{ 

conti.click();

}

由於某些奇怪的原因,在if(conti.isDisplayed())內部沒有點擊繼續”按鈕 所以,失去那個循環。 只需使用conti.click(); 它試用了!

你好切換到彈出窗口之后使用某種顯式等待

         boolean ajaxPopup = new WebDriverWait(driver,10).until(ExpectedConditions
                 .visibilityOfElementLocated(By.id("btnContinue"))) != null;

         Assert.assertTrue(ajaxPopup);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM