selenium webdriver modal dialog java - java

I am testing my form and when I don't type needed data I get javascript alert in my web app that tells the user to enter missing data. I can't handle this with selenium because when I partially fill form and try to submit I get exception
org.openqa.selenium.UnhandledAlertException: Modal dialog present
If I catch exception the alert in webdriver is not shown. Is that any solution to solve this issue?I would like to be able to submit form and catch the alert. I am using Linux Mint,Firefox 18 and selenium 2.28.0 with java
Best regards
UPDATE
I have following in my code
somePage.fillName(sth); //only 1 of 2 required field are filled
somgePage.submit(); //here js alert is shown right after clicking submit
somePage.getCurrentAlert();
//here are code parts
public Alert getCurrentAlert(){
return driver.switchTo().alert();
}
public AdminHome submit(){
saveUrl();
WebElement submit = driver.findElement(By.id("add_quiz_submit_button"));
try{
submit.click();
if(urlChanged()){
return new AdminHome(driver);
}
}
catch(Exception e){
e.printStackTrace();// exception 1
return null;
}
return null;
}
//Exception 1
org.openqa.selenium.UnhandledAlertException: Modal dialog present
//The test fails because of:
org.openqa.selenium.NoAlertPresentException: No alert is present (WARNING: The server did not provide any stacktrace information)
However if I click manual on submit the test work as expected. Thanks in advance

you should handle the alert as soon as the action is done and there shouldn't be any other action before handling the alert.
for instance your code should be
try{
submit.click();
if (alertPresent())
getCurrentAlert();
if(urlChanged()){
return new AdminHome(driver);
}
}
This will check alert and then accept the alert. The interaction of webdriver is more similar to the action we interact with manually with browser. So when the click on submit is done we will be able to see alert and no actions can be done until accept or reject it.
Vishal

It is because driver accepts the alert itself when the UnhandledAlertException is thrown. How can you submit the form if you have filled it partially?
If it is even possible, just catch that exception, and in catch block write the line which clicks on the submit button.

Use Robot class (Press enter) to close modal dialog box
try {
(new Robot()).keyPress(java.awt.event.KeyEvent.VK_ENTER);
(new Robot()).keyRelease(java.awt.event.KeyEvent.VK_ENTER);
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Related

How to handle Exception in thread "main" org.openqa.selenium.NoAlertPresentException: no such alert (Selenium & JAVA)

I want to handle this exception in JAVA & SELENIUM
In my code i did this:
Alert alert = driver.switchTo().alert(); alert.accept();
driver.findElement(By.xpath("//*[#id=\"btnGoConfirm\"]")).click();
The problem is that sometimes the popup does not appear and the exception in thrown because it cannot click on anything at all, do you get me?
How should i handle this particular situation?
Something like:
try {
Alert alert = driver.switchTo().alert(); alert.accept();
driver.findElement(By.xpath("//*[#id=\"btnGoConfirm\"]")).click();
}
catch(Exception e) {
System.out.println("I got an exception, but it is only because alert did not appear, so I continue with my script")
}

selenium UnhandledAlertException

I have a site where alert show 2 times.
Scenario:
First load site
After loading press submit button and its show browser alert
Accept alert then take sometimes
Then again shows browser alert with success message and its accept (2nd alert see console)
For browser issue sometimes 2nd alert, not show and I handle it by catch
try {
driver.switchTo().alert();
driver.switchTo().alert().accept();
WebDriverWait wait = new WebDriverWait(driver, 30);
// Wait for Alert to be present
Alert myAlert = wait.until(ExpectedConditions.alertIsPresent());
myAlert.accept();
}
catch (org.openqa.selenium.NoAlertPresentException e){
driver.navigate().refresh();
}
catch (org.openqa.selenium.UnhandledAlertException e){
driver.navigate().refresh();
}
Exception in thread "main" org.openqa.selenium.UnhandledAlertException: unexpected alert open: {Alert text : see console}
(Session info: chrome=61.0.3163.100)
Manage this error by UnhandledAlertException but somehow its not working..Can anyone suggest me how can i handle this

How to handle intermittent alert in Selenium WebDriver?

I have automation scenario that sometimes the system return javascript alert and sometimes not at all. I don't know what the cause of this, probably the network issue. I already create the alert handler for this:
public boolean isAlertPresent() {
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.alertIsPresent());
return true;
}
I call this in one of my step that sometimes appear alert:
public WSSPage enterAndSearchContent(String title) throws InterruptedException {
waitForElementTextWithEnter(searchTextField, title);
while (isAlertPresent()){
Alert alert = driver.switchTo().alert();
alert.dismiss();
break;
}
return PageFactory.initElements(driver, WSSPage.class);
}
The problem is when the alert doesn't show up, it will give me NoAlertPresentException, and the automation result will be failed. I want the code to move on if the alert doesn't happen by moving to the next line, in this case it will just return PageFactory.initElements(driver, WSSPage.class);
Can you help me provide a better code from this?
Thanks a lot.
JavascriptExecutor worked for you. Just take care that you should execute it before clicking the event which invoke alert.
((JavascriptExecutor) driver).executeScript("window.confirm = function(msg) { return true; }");
Note :- do not use it after clicking on event which invoke alert confirmation box. Above code by default set the confirmation box as true means you are accepting/click on ok on all confirmation box on that page if invoked
Hope it will help you :)
You can modify the method isAlertPresent as given below and try it. It may help you.
public boolean isAlertPresent() {
try{
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.alertIsPresent());
return true;
}
catch (NoAlertPresentException noAlert) {
return false;
}
catch (TimeoutException timeOutEx){
return false;
}
}
You can include that particular exception in try catch. Then the exception will be catched and will not through any error and your execution will continue.
Also create a implicit wait to handle this with less timestamp.

Selenium WebDriver, TestNG with Java

I am unable to Handle the Print window/popup when I click on a Print button on the Web application. I need to be able to either Close this Window, Click on Print or Cancel. I am not sure whether this is a pop-up or a window.
Could some one help me?
see whether any web elements are visible if you hover the mouse over the popup.
if web elements are visible then its web application pop up
if no web elements are visible then its windows popup
However you can ignore the popup by sending escape key. the following code will work. i just tried, it worked.
public class demo extends parent {
WebDriver driver = new FirefoxDriver();
#Test
public void launch() throws InterruptedException {
driver.get("https://www.google.co.in");
Robot r = null;
try {
r = new Robot();
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
WebElement el = driver.findElement(By.xpath(".//*[#id='hplogo']"));
el.click();
Thread.sleep(10000);
el.sendKeys(Keys.CONTROL + "p"); // trying to invoke print pop up
Thread.sleep(10000);
r.keyPress(KeyEvent.VK_ESCAPE); //dismissing it by sending escape keys
}
}
hope you will get some idea here :)

How to handle Javascript Alert/pop up window in selenium webdriver

I am not sure whether selenium webdriver can handle Javascript alert/pop-up window.
I have a scenario like
1. User uploads a xls file and click on upload button
2. Alert/Pop-up window will be displayed . Click "OK" on window
Am able to automate the above scenario but the Alert/pop-up window is displayed while running the scripts.
Is their anyway workaround that we can handle javascript alert/pop-up window?
You can also try waiting for the alert to appear and then accepting it.
Below is the code for that (after the upload button is clicked):
try{
//Wait 10 seconds till alert is present
WebDriverWait wait = new WebDriverWait(driver, 10);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
//Accepting alert.
alert.accept();
System.out.println("Accepted the alert successfully.");
}catch(Throwable e){
System.err.println("Error came while waiting for the alert popup. "+e.getMessage());
}
Switch to default content
Dismiss alert after accepting "OK"
Otherwise your alert is from a different window which you'll have to switch to in order to dismiss
driver.switchTo().alert().accept();
driver.switchTo().alert().dismiss();
driver.switchTo().alert().defaultConent();
Mock it out. Call javascript behind the UI directly:
WebDriver driver = new AnyDriverYouWant();
if (driver instanceof JavascriptExecutor) {
((JavascriptExecutor)driver).executeScript("yourScript();");
}
There are the four methods that we would be using along with the Alert interface:
void dismiss() – The dismiss() method clicks on the “Cancel” button as soon as the pop up window appears.
void accept() – The accept() method clicks on the “Ok” button as soon as the pop up window appears.
String getText() – The getText() method returns the text displayed on the alert box.
void sendKeys(String stringToSend) – The sendKeys() method enters the specified string pattern into the alert box.
if(isAlertPresent(ldriver)){
Alert alert = ldriver.switchTo().alert();
System.out.println(alert.getText());
alert.accept();
}
Alert is a interface which have the abstract methods below
void accept();
void dismiss();
String getText();
void sendKeys(String keysToSend);
new WebDriverWait(driver,10).
until(ExpectedConditions.alertIsPresent()).accept();
alertIsPresent() internally return the
driver.switchTo.alert(); then we don't have to write it explicitly
hope this is been helpful

Categories

Resources