2016-09-07 62 views
2

我的情況是:如何從一個彈出切換到另一個彈出硒的webdriver

  1. 主窗口 - >做一些活動。
  2. 點擊保存按鈕 - >確認彈出打開與確定和取消按鈕。
  3. 單擊確定按鈕上的確認彈出 - >另一個成功彈出打開與確定按鈕。
  4. 點擊OK按鈕,彈出成功。
  5. 切換到主窗口。

PopUp以上是HTML彈出窗口。 我如何處理硒以上的情況?我是硒新人。請幫助我。我被困在上面。

enter image description here

代碼

String ParentWindow = driver.getWindowHandle(); //switching from parent to pop up window 
for (String Child_Window : driver.getWindowHandles()) { 
driver.switchTo().window(Child_Window); 
WebDriverWait wait = new WebDriverWait(driver, 30);// 1 minute 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.‌​name("test"))); 
driver.findElement(By.xpath("//input[@value='test']")).click‌​(); 
} 
driver.switchTo().window(ParentWindow); 

HTML

<div> 
<div class="msgBoxContainer"> 
<div id="msgBox1473308035532Image" class="msgBoxImage"> 
<img src="styles/images/confirm.png"> 
</div> 
<div id="msgBox1473308035532Content" class="msgBoxContent"> 
<p> 
<span>Saveでよろしいですか??</span> 
</p> 
</div> 
</div> 
<div id="msgBox1473308035532Buttons" class="msgBoxButtons"> 
<input id="msgBox1473308035532FirstButton" class="msgButton" type="button" value="はい" name="はい"> 
<input class="msgButton" type="button" value="いいえ" name="いいえ"> 
</div> 
</div> 
</div> 

//當點擊第一個彈出的OK按鈕各自DIV是破壞以及如何產生新的div第二彈出

<div id="msgBox1473308225709" class="msgBox" style="background-image:  url("styles/images/msgBoxBackGround.png"); opacity: 1; top: 52.5px; left: 566.5px;"> 
<div class="msgBoxTitle">Information</div> 
<div> 
<div class="msgBoxContainer"> 
<div id="msgBox1473308225709Image" class="msgBoxImage"> 
<img src="styles/images/info.png"> 
</div> 
<div id="msgBox1473308225709Content" class="msgBoxContent"> 
<p> 
<span>登録完了</span> 
</p> 
</div> 
</div> 
<div id="msgBox1473308225709Buttons" class="msgBoxButtons"> 
<input id="msgBox1473308225709FirstButton" class="msgButton" type="button" value="はい" name="はい"> 
</div> 
</div> 
</div> 
+0

我寫了下面的代碼從主窗口中切換到第一彈出,但無法從第一個彈出開關達到第二。 String ParentWindow = driver.getWindowHandle(); //從父窗口切換到彈出窗口 for(String Child_Window:driver.getWindowHandles()) driver.switchTo()。window(Child_Window); WebDriverWait wait = new WebDriverWait(driver,30); // 1分鐘 wait.until(ExpectedConditions.visibilityOfElementLocated(By.name(「test」))); driver.findElement(By.xpath(「// input [@ value ='test']」))。click(); } driver.switchTo()。window(ParentWindow); – Swa

+0

你能分享這些彈出屏幕截圖嗎? –

+0

正如我看到你的彈出屏幕截圖這是一個簡單的HTML對話框,你可以共享對話框HTML以及更好的解決方案,FYI無需切換窗口,因爲它不是一個窗口彈出.. –

回答

2

點擊保存按鈕,你應該如下處理這些信息對話框後: -

WebDriverWait wait = new WebDriverWait(driver,10); 

//For first dialog box 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input.msgButton[id*='msgBox'][id*='FirstButton']"))).click(); 

//Now same as for second dialog box 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input.msgButton[id*='msgBox'][id*='FirstButton']"))).click(); 

注意: - 不需要切換窗口,這些對話框都是簡單的HTML元素,所以你需要正常處理它找到這些元素。

Edited1: - 如果您無法使用WebElement.click()點擊嘗試使用Actions類移動如下點擊之前的元素: -

Actions act = new Actions(driver); 

//For first dialog box 
WebElement firstDialog = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input.msgButton[id*='msgBox'][id*='FirstButton']"))); 
act.moveToElement(firstDialog).click().perform(); 

//Now same as for second dialog box 
WebElement secondDialog = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input.msgButton[id*='msgBox'][id*='FirstButton']"))); 
act.moveToElement(secondDialog).click().perform(); 

Edited2: - 如果您仍然無法點擊嘗試如下使用JavascriptExecutor: -

//For first dialog box 
WebElement firstDialog = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input.msgButton[id*='msgBox'][id*='FirstButton']"))); 
((JavascriptExecutor)driver).executeScript("arguments[0].click()",firstDialog); 

//Now same as for second dialog box 
WebElement secondDialog = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input.msgButton[id*='msgBox'][id*='FirstButton']"))); 
((JavascriptExecutor)driver).executeScript("arguments[0].click()",secondDialog); 
+0

@ saurabh.Thank you so much ..試過上面的解決方案和錯誤發生爲: org.openqa.selenium.WebDriverException :未知錯誤:元素在點(1552,47)處不可點擊。其他元素將收到點擊:

Swa

+0

@Swa嘗試使用動作類,然後,看到更新的答案,並讓我知道.. –

+0

@ saurabh ..嘗試和相同的錯誤發生..在Firefox,IE瀏覽器和鉻瀏覽器嘗試,但錯誤似乎有。實際上,在彈出div之前,div是存在的。它是否造成問題?我不完全清楚。

Swa

0

由於是彈出的java腳本,所以可以使用alert類。

WebDriverWait wait = new WebDriverWait(driver, 30); 
    // With first Alert 
    Alert firstAlert = wait.until(ExpectedConditions.alertIsPresent()); 
    firstAlert.accept(); 

    // With Second alert 
    Alert secondAlert = wait.until(ExpectedConditions.alertIsPresent()); 
    secondAlert.accept(); 

    driver.switchTo().defaultContent(); 
+0

..感謝您的回覆,但它不起作用,並顯示錯誤。 org.openqa.selenium.WebDriverException:未知錯誤:元素在點(999,464)處不可點擊。 其他元素將收到點擊: – Swa

+0

嘗試查找是否有任何iframe或不。這可能不是一個警報。它可能是一個在iframe中敲打的模態對話框。如果您找到iFrame,首先切換到它並嘗試單擊該元素。 –

1

1)主窗口 - >做一些活動。

編寫代碼

2)上的保存按鈕 - >確認單擊彈出打開方式確定和取消按鈕。

for confirmation poop up

Alert simpleAlert = driver.switchTo().alert(); 
     String alertText = simpleAlert.getText(); 
     System.out.println("Alert text is " + alertText); 
     simpleAlert.accept(); 

3)單擊OK按鈕,確認彈出 - >另一個成功彈出與OK鍵開啓。

another success pop up open with OK button.

simpleAlert.accept(); 

4)單擊OK按鈕,成功彈出。

WebDriverWait wait = new WebDriverWait(driver, 30); 
    simpleAlert.accept(); 

5)切換到主窗口。

driver.switchTo().defaultContent(); 

或者您可以使用下面的代碼

String parentWindowHandler = driver.getWindowHandle(); // Store your parent window 
String subWindowHandler = null; 

Set<String> handles = driver.getWindowHandles(); // get all window handles 
Iterator<String> iterator = handles.iterator(); 
while (iterator.hasNext()){ 
    subWindowHandler = iterator.next(); 
} 
driver.switchTo().window(subWindowHandler); // switch to popup window 
              // perform operations on popup 

driver.switchTo().window(parentWindowHandler); 
+0

@ shailendra ..謝謝你的回覆..我真的對不起,彈出窗口是HTML彈出窗口。 ] /輸入 HTML代碼是: Swa

+0

@ shailendra..Thanks..used above code(第二種解決方案)併發生了以下錯誤我添加了等待和可見性代碼。系統點擊第一個彈出窗口中的確定按鈕,第二個彈出窗口打開但無法執行任何操作。 org.openqa.selenium.WebDriverException:未知錯誤:元素在點(1552,47)處不可點擊。其他元素會收到點擊: – Swa

+0

@Swa當元素位置不固定時,這種類型的執行會讀取此https://www.seleniumeasy。com/selenium-tutorials/element-is-not-clickable-at-point-selenium-webdriver-exception –