I am learning how to automate tests with Selenium WebDriver, however I got stuck and cannot make dropdown menu to work in Firefox. The same code runs perfectly fine in Chrome.
The site I am practicing on is: http://www.executeautomation.com/demosite/index.html and I want to click the following item from menu: Automation Tools > Selenium > Selenium WebDriver.
The error message suggest that the web element may not be loaded on the screen yet, so I have implemented some method to wait with every execution until the element shows up:
public static void ImplicitWait(WebDriver driver){
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
}
but it did not helped.
Then I read that it is better to "pipe" those moveToElement() methods instead of performing them one by one. So I changed this:
action.moveToElement(menu).perform();
action.moveToElement(selenium).perform();
action.moveToElement(seleniumWebDriver).click().build().perform();
to one line. At this point it started to work on Chrome, but I am still struggling to make it work on Firefox.
The current code looks like this:
System.setProperty("webdriver.gecko.driver", "C:\\Drivers\\geckodriver-v0.24.0-win64\\geckodriver.exe");
System.setProperty("webdriver.firefox.bin", "C:\\Program Files\\Mozilla Firefox\\firefox.exe");
WebDriver driver = new FirefoxDriver();
ImplicitWait(driver);
driver.navigate().to("http://executeautomation.com/demosite/index.html");
WebElement menu = driver.findElement(By.id("Automation Tools"));
WebElement selenium = driver.findElement(By.id("Selenium"));
WebElement seleniumWebDriver = driver.findElement(By.id("Selenium WebDriver"));
Actions action = new Actions(driver);
action.moveToElement(menu).moveToElement(selenium).moveToElement(seleniumWebDriver).click().build().perform();
As I mentioned above the same works fine when I switch to Chrome, but with Firefox I get the error message:
Exception in thread "main" org.openqa.selenium.interactions.MoveTargetOutOfBoundsException: (-9862, 206) is out of bounds of viewport width (1283) and height (699)
I am using: * Firefox v66.0.2 * Java v1.8.0_201 * Selenium Java v3.141.59 * GeckoDriver v0.24.0
Please help.
The main issue with the Web Application is that the HTML DOM attains
document.readyState
equals tocomplete
even before the sub-menu element with text as Selenium WebDriver gets rendered. Hence you see the error as:Solution
So an ideal solution would be:
titleIs()
Execute Automation
elementToBeClickable
with text as SeleniumCode Block:
Browser Snapshot:
Try using it -
Please try the below code(if you are inside frame , you need to come out and use below code):
Use
WebDriverWait
and try the following code.I've observed the same issue with
geckodriver
andActions
class. Although you can go with following codeCode is working fine at my end. let me know if any issue.
Note: Keep the mouse pointer out of web page screen else it override the current focus.