Using JavascriptExecutor to sendKeys plus click on web element - javascript

I'm trying to open a link in a new tab, then switch to that tab, in a Firefox browser, using selenium in Java. It's my understanding that in order to do this, I need to use a send keys combination.
In order to open the link in the same window, I've been using something like this:
WebElement we = driver.findElement(By.xpath("//*[#id='btn']"));
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", we);
The above was working fine for me.
Now I'm trying to also sendKeys, as in below, which is not working:
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("keyDown(Keys.CONTROL)
.keyDown(Keys.SHIFT)
.click(arguments[0])
.keyUp(Keys.CONTROL)
.keyUp(Keys.SHIFT);", we);
Any advice? I can't figure out the correct syntax to sendKeys to JavascriptExecutor. I've seen some similar solutions using Actions, but this hasn't worked for me either.

try below code to open any link on page to new tab & switch to that tab. Perform operations there & go back to first tab for further execution.
WebDriver driver = new FirefoxDriver();
driver.get("http://stackoverflow.com/");
WebElement e = driver.findElement(By.xpath(".//*[#id='nav-questions']"));
Actions action = new Actions(driver);
action.keyDown(Keys.CONTROL).build().perform(); //press control key
e.click();
Thread.sleep(10000); // wait till your page loads in new tab
action.keyUp(Keys.CONTROL).build().perform(); //release control key
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "\t"); //move to new tab
driver.navigate().refresh(); // refresh page
driver.findElement(By.xpath(".//*[#id='hlogo']/a")).click(); //perform any action in new tab. I am just clicking logo
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "\t"); //switch to first tab
driver.navigate().refresh();
driver.findElement(By.xpath(".//*[#id='hlogo']/a")).click();// refresh first tab & continue with your further work.I am just clicking logo

Related

browser pop up is not closing in selenium

After launching the url there is a email pop up that i am trying to close. i have written xpath and able to find the close icon with that. but when i am trying to execute it is not closing. then i added implicitly wait for the element to be visible and then trying to close. still it is not closing.
Can you please tell me what would be the reasons for such cases and how it can be solved.
and Submit button is also not clicking i have given the correct xpath.
Thanks in advance..
below is the code snippet.
public static void main(String[] args) {
WebDriver driver;
System.setProperty("webdriver.chrome.driver", "E:\\Softwares\\Chromedriver.exe");
driver = new ChromeDriver();
driver.get("https://html.com/input-type-file/");
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
WebElement closeButon = driver.findElement(By.xpath("//a[#class='om-close miami-element-close miami-close']"));
if(closeButon.isDisplayed())
{
System.out.println("close Buton is there.. ");
closeButon.click();
System.out.println("close Buton closed ");
}
driver.findElement(By.xpath("//input[#name='fileupload']")).sendKeys("E:\\Users\\laxman_p\\Desktop\\PromoFeature.txt");
//Submit button
driver.findElement(By.xpath("//*[#id='post-206']/div/div[3]/form/input[2]")).click();
}
If you cant close it by xpath,
I think this issue can be related with focused window,
You need to use getWindowHandle and switchTo methods to focus this pop-up.
After that you will be able to make process on this pop-up.
driver.getWindowHandles()
returns set of windows.
driver.switchTo.window(windowId);
will switch you to window which you want to focus on.

Clicking an image button using selenium webdriver after login

I'm trying to automate a login page using selenium-webdriver and I'm using IE as the browser. The problem that I'm experiencing is that after the login I'm not able to select the image button. I have even introduced time delay after the login credentials are entered still the script runs and the button doesn't gets clicked. P.S I have commented all the methods I have tried too.
The code I have used is:
System.setProperty("webdriver.ie.driver",
"C:/Program Files/IEDriverServer/IEDriverServer.exe");
WebDriver driver=new InternetExplorerDriver();
driver.manage().window().maximize();
driver.navigate().to("website name");
driver.findElement(By.id("userid")).sendKeys("username");
driver.findElement(By.id("password")).sendKeys("password");
//driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
driver.findElement(By.id("submitButton")).click();
Thread.sleep(5000);
//driver.findElement(By.id("imgBtnAdd")).click();
//driver.findElement(By.cssSelector("a[href='Images/Go.gif']")).click();
driver.findElement(By.xpath("//img[# src='Images/Go.gif']")).click();
//System.out.println("Manual Click of Ok button");
//By xpath = By.xpath("//button[#name='imgBtnAdd'][#type='image'][contains(image(),'Images/Go.gif')]");
//WebElement myDynamicElement = (new WebDriverWait(driver, 10))
//.until(ExpectedConditions.presenceOfElementLocated(xpath));
//myDynamicElement.click();
driver.findElement(By.cssSelector("input[id='rblRoleGroup_4']")).click();
driver.findElement(By.id("imgBtnRoleGroup")).click();
//WebElement element = driver.findElement(By.id("imgBtnAdd"));
//Thread.sleep(5000);
//JavascriptExecutor executor = (JavascriptExecutor)driver;
//executor.executeScript("arguments[0].click();", element);
//driver.close();
You can try sendkkeys :
driver.findElement(By.id("imgBtnAdd")).sendKeys(Keys.ENTER);
If image is in new window try this:
for(String winHandle : driver.getWindowHandles())
{
driver.switchTo().window(winHandle);
}
Try click using JavascriptExecuter might help you -
WebElement element = driver.findElement(By.id("imgBtnAdd"));
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", element);
After viewing your code, I have noticed that your xpath was wrong.
Instead of using <img> tag, use <input> tag.
driver.findElement(By.xpath("//input[#src='Images/Go.gif']")).click();
Explanation of xpath:- Use src attribute of <input> tag.

Close Flipkart open pop-up and go to main window using Selenium

WebDriver driver = new FirefoxDriver();
driver.get("https://www.flipkart.com");
driver.manage().window().maximize();
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);
I tried it by switching to main window also. Please add valuable input or code to close the pop up.
You can try using the java Robot API by importing java.awt.Robot libraries. An example is here:
One solution for File Upload using Java Robot API with Selenium WebDriver by Java
You can try to use it similarly to press the Esc key. Pressing Esc on flipkart website gets rid of the pop-up.
The pop-up which appears on Flipkart's website is a simple HTML modal. Window handle is used when a new pop-up window needs to be accessed.
To close the pop-up just click on the cross on the top right corner of the pop-up. Use waits to ensure that selenium finds the WebElement.
Try this:
driver.get("https://www.flipkart.com");
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement cross = wait.until(
ExpectedConditions.visibilityOfElementLocated(By.className("close-icon")));
cross.click()

Unable to click ViewSeats button in redbus site using selenium

I was trying to automate a flow using redbus site. I was not able to click View Seats button in the second page after selecting journey details in the first page of RedBus site. I have tried clicking using javascript click() as well.
Please find the code below:
WebDriver ffdri = new FirefoxDriver();
ffdri.get("https://www.redbus.in/Booking/SelectBus.aspx? fromCityId=123&toCityId=122&doj=10-Oct-2015&busType=Any&opId=0");
ffdri.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(ffdri,20);
wait.until(ExpectedConditions.presenceOfElementLocated(By.linkText("Travels")));
JavascriptExecutor js = (JavascriptExecutor) ffdri;
js.executeScript("document.getElementsByClassName('dpBtn')[1].click();");
ffdri.findElement(By.id("BusType_AC")).click();
ffdri.findElement(By.id("BusType_Sleeper")).click();
js.executeScript("document.getElementsByClassName('dpBtn')[1].click();");
ffdri.findElement(By.linkText("Fare")).click();
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//button[#class='viewSeatsBtn']"))).click();
// System.out.println(val.getText());
//js.executeScript("document.getElementsByClassName('viewSeatsBtn')[0].click();");
// WebElement ViewSeats = ffdri.findElement(By.xpath("//button[#class='viewSeatsBtn']"));
//js.executeScript("arguments[0].click();", ViewSeats);

close the window popup using JS

Writng script for closing window which i get as a pop up in any website for example
if u launch www.myntra.com it gives a window like if u have facebook acount login.. am trying to close this facebook window
HTML code:
<div class="close"></div>
frist i have tried normal webdriver script
driver.findElement(By.xpath("//div[#class='close']").click;
above code gives me exception like "element is not visible you may want to interact with"
i have tried using javaexecutor somthing like below'
WebElement element = driver.findElement(By.xpath("//div[#class='close']"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);
above JS code doesnot give me exception but`enter code here` even it doesnot close the window for which i have written the code.
1)why in above webdriver code i get exception like "element is not visible you may want to interact with"? what is reason behind this.
2) what is the way to close the window?
i have spent whole day but dint got solution please help me out thanks in advance
You can close the browser window with Selenium, without Javascript.
// get the current windowHandle before triggering the popup (if loading myntra triggers the popup, just navigate to localhost and get the windowHandle there, before navigating to myntra)
String window1 = driver.getWindowHandle();
// trigger the popup
driver.get("www.myntra.com");
// get all window handles
String[] handles = driver.getWindowHandles().toArray(new String[2]);
// switch focus to the popup window
driver.switchTo().window(handles[handles.length - 1]);
// close the popup
driver.close();
// switch focus back to the original window
driver.switchTo().window(window1);
// continue test...

Categories