How to perform multiple clicks on a button (4 times) in selenium webdriver, without making use of for loop?
Currently I have to make use of for loop to click on a button and make it work because on a single click it doesn't work.
Any solution for the above question?
for (int i=1; i<=4; i++) {
driver.findElement(By.xpath(".//*[#id='body']/div[6]/div[1]/div[3]/div[1]/ul/li[5]/a")).click();
}
Thread.sleep(1000);
driver.findElement(By.xpath(".//*[#id='body']/div[6]/div[1]/div[3]/div[2]/div[1]/input")).sendKeys("7");
driver.findElement(By.xpath(".//*[#id='body']/div[6]/div[1]/div[3]/div[2]/div[2]/input")).sendKeys("8");
driver.findElement(By.xpath(".//*[#id='body']/div[6]/div[1]/div[3]/div[2]/div[3]/input")).sendKeys("9");
driver.findElement(By.xpath(".//*[#id='body']/div[6]/div[1]/div[3]/div[1]/ul/li[7]/a/div[2]")).click();
driver.findElement(By.linkText("demobase")).click();
Try For Java Script Executor
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60)); wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete")); IWebElement saveBtn = wait.Until(ExpectedConditions.ElementToBeClickable(By.Xpath("//*[#id='body']/div[6]/div[1]/div[3]/div[1]/ul/li[5]/a"))); ((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click()", saveBtn);
You could try:
WebElement we = findElement (By.xpath("path "));
Actions a = new Actions();
a.doubleClick(we).perform();
a.doubleClick(we).preform();
Related
First post ...
I discovered javascript and selenium, I'm trying to make a left click of a duration of 1 or 2 seconds.
It is easy to make a right click or a double click, but how to make a long click?
Thank you for your support.
Double click is ok :
Actions action = new Actions(driver);
WebElement link = driver.findElement(By.ID ("Element ID"));
action. doubleClick (link).perform();
Click with executeScript ok:
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.querySelector(script).click();",Arguments);
At this point I have no track for the long click ...
You can try this below option
public void loingClick(WebDriver driver,WebElement element, int numberOfSeconds) throws Exception
{
Actions action = new Actions(driver);
action.clickAndHold(element).build().perform();
Thread.sleep(1000*numberOfSeconds);
action.moveToElement(element).release();
}
I want to click on radio button, if radio button is already selected then it should skip for the selection.
For more details on this visit this site, go to the Signed in option -> Create an account, then you will be able to getting the page, that is provided to the screenshot.
Refer Image:
Please Find the workable code:
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("http://automationpractice.com/index.php");
Thread.sleep(2000);
driver.findElement(By.xpath(".//a[#class='login']")).click();
Thread.sleep(1000);
driver.findElement(By.xpath(".//input[#id='email_create']")).sendKeys("abc123_1#yahoo.com");
Thread.sleep(1000);
driver.findElement(By.xpath(".//button[#id='SubmitCreate']")).click();
Thread.sleep(4000);
driver.findElement(By.xpath(".//input[#id='id_gender1']")).click();
Thread.sleep(1000);
You can put implicit waits as well
Try this way to check that the MR radio button is selected or not? If MR radio button is not selected then only if condition will execute.
WebElement MR = driver.findElement(By.xpath("//div/span/input[#id='id_gender1']"));
if(!MR.isSelected())
{
MR.click();
}
OR
If you want to check that the Mrs radio button is selected or not? If Mrs radio button is not selected then only if condition will execute.
WebElement Mrs = driver.findElement(By.xpath("//div/span/input[#id='id_gender2']"));
if(!Mrs.isSelected())
{
Mrs.click();
}
I have a List containing 5 'Buy' buttons. Selenium WebDriver is not clicking the first 'Buy' button but clicks the remaining 4 just fine. Ran a println and it shows all 5 buy buttons being found by WebDriver.
I have tried switching the order of buttons in the List, I have attempted to debug it, I have included explicit wait also but nothing is helping. Anyone has any clues?
My code is as follows:
for (int i = 0; i < allProductsOnsite.size(); i ++) {
//System.out.println(allProductsOnsite.get(i).getText());
if (prodsToBuy.contains(allProductsOnsite.get(i).getText())) {
System.out.println("Found -------" + allProductsOnsite.get(i).getText() );
WebDriverWait wt = new WebDriverWait(driver, 15);
wt.until(ExpectedConditions.visibilityOfAllElements(allProductsOnsite));
allBuyButtons.get(i).click();
}
}
Try to click using JavascriptExecutor
WebElement element= driver.findElement(By.xpath(".//*[#id='loginButton']/div"));
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", element);
Also use some wait if needed before this code
Hope this will help you :)
I am trying to click a mouse hover link using the code below. The webdriver (v.2.35) doesn't throw any error but the element isn't clicked. Can somebody help me figure out what's wrong?
String URL = "http://www.kgisliim.ac.in/"
String menu ="Alumni>Register"
driver.get(URL);
String[] menuItems = menu.split(">");
Actions actions = new Actions(driver);
WebElement tempElem;
for (int i =0 ; i< menuItems.length ; i++) {
tempElem = driver.findElement(By.linkText(menuItems[i].trim()));
actions.moveToElement(tempElem).build().perform();
}
actions.click();
actions.perform();
NOTE: The above code works fine in the below scenario
String URL = "http://www.flipkart.com/"
String menu ="Clothing>Jeans"
You can try this:
WebDriver driver=new FirefoxDriver();
driver.get("http://www.kgisliim.ac.in/");
Actions actions=new Actions(driver);
WebElement menuHoverLink=driver.findElement(By.linkText("Alumni"));
actions.moveToElement(menuHoverLink);
//driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
WebElement subLink=driver.findElement(By.cssSelector(".options>ul>li>a"));
actions.moveToElement(subLink);
actions.click();
actions.perform();
Since the menu on http://www.kgisliim.ac.in/ takes a second to slide out, you could add a WebDriverWait to make sure the submenu has time to become visible before moving the cursor to it. Try replacing the first line in your for loop with the following line. This will wait a maximum of 5 seconds for the submenu (but will return the WebElement as fast as possible within that time).
tempElem = new WebDriverWait(driver, 5).until(ExpectedConditions
.elementToBeClickable(By.linkText(menuItems[i].trim())));
I stumbled across a similar issue recently, with phantomJS and ghostdriver. In my case, the problem was the window size - the HTML element was outside the visible area and my mouse movements were having no effect (default size is 400x300, which is rather small).
You can check the window size with
driver.manage().window().getSize()
And you can change it with
driver.manage().window().setSize(new Dimension(width, height));
I am using Selenium WebDriver to automate my browser tests. My browser header is floating and is always present irrespective of the browser scroll.
So when I click on certain elements that are present below the current visible region of the browser, selenium tries to scroll the element into view and click them.
But because of the auto scrolling as such the elements are scrolled behind the floating header and when any action is performed on them, the elements in the page header get clicked.
is there any way to limit the default scroll of the WebDriver?
Locatable hoverItem = (Locatable) driver.findElement(By.xpath("//li[text()='Reklama w Google']"));
int y = hoverItem.getCoordinates().getLocationOnScreen().getY();
((JavascriptExecutor)driver).executeScript("window.scrollBy(0,"+y+");");
If you want to scroll on the firefox window using selenium webdriver, one of the way is to use javaScript in the java code, The javeScript code to scroll down is as follows:
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("window.scrollTo(0,Math.max(document.documentElement.scrollHeight," +
"document.body.scrollHeight,document.documentElement.clientHeight));");
You can scroll to the necessary location using javascript You need to use the scrollTo method rather than the scrollBy method for it to work.
public void scrollToElement(By by) {
Locatable element = (Locatable) selenium.findElement(by);
Point p= element.getCoordinates().getLocationOnScreen();
JavascriptExecutor js = (JavascriptExecutor) selenium;
js.executeScript("window.scrollTo(" + p.getX() + "," + (p.getY()+150) + ");");
}
Scroll to top can be done:
private void scrollToTop() {
JavascriptExecutor js = (JavascriptExecutor) webDriver;
js.executeScript("window.scrollTo(0, 0);");
}
Simple use the
.sendKeys(Keys.PAGE_DOWN);
when your element was visible, just click on it, by .click(element).perform();
for me work something like this:
clicker = new Actions(driver);
clicker.sendKeys(Keys.PAGE_DOWN);
Thread.sleep(1000);
clicker.click(button).perform();
Thread.sleep(1000);
For scrolling down:
System.setProperty("webdriver.chrome.driver",
"/home/shreetesh/chromedriver");
WebDriver driver = new ChromeDriver();
String url = "https://en.wikipedia.org/wiki/Main_Page";
driver.get(url);
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("scroll(0, 25000);");
To scrolling up just replace the value of scroll with (2500, 0).
Use below code for scrolling up and scrolling down
Actions dragger = new Actions(driver);
WebElement draggablePartOfScrollbar = driver.findElement(By.xpath("<Scroll bar Element >"));
// drag downwards
int numberOfPixelsToDragTheScrollbarDown = 50;
for (int i=10 ; i<500 ; i=i+numberOfPixelsToDragTheScrollbarDown) {
try {
// this causes a gradual drag of the scroll bar, 10 units at a time
dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform();
Thread.sleep(1000L);
} catch(Exception e1){}
}
// now drag opposite way (downwards)
numberOfPixelsToDragTheScrollbarDown = -50;
for (int i=500;i>10;i=i+numberOfPixelsToDragTheScrollbarDown){
// this causes a gradual drag of the scroll bar, -10 units at a time
dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform();
Thread.sleep(1000L);
}
I recently had this problem due to a Drupal menu blocking the element when I ran this code:
public void scrollTo(WebElement x) {
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", x);
}
After referencing this page, I updated to set the boolean to false using this code, and it works great:
public void scrollTo(WebElement x) {
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(false);", x);
}