2016-09-07 58 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 –