not able to select hidden link - selenium - java

I have to select web link when i mouse hover to particular frame in the webpage, the button(link to next page) will be visible.
WebElement mainElement = driver.findElement(By.xpath(<frame xpath >));
Actions builder = new Actions(driver);
builder.moveToElement(mainElement);
WebElement button1 = driver.findElement(By.xpath("//*[#id='currentSkills']/div[1]/div/a"));
builder.moveToElement(button1).click().perform();
I am still unable to select the particular link
when i execute, the following error am getting
org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 131 milliseconds
But when i hover mouse pointer to the particular frame during AUT(just to move to particular frame without clicking anything), then test is executing sucessfully.
I know this can be handled by JS. But i want to find out is there any solution within selenium webdriver

On some of the drivers for the various browsers, sometimes custom actions like this won't work unless you explicitly enable native events at the time you create the driver:
FirefoxProfile profile = new FirefoxProfile();
profile.setEnableNativeEvents(true);
driver = new FirefoxDriver(profile);
or another method of setting it at the time you create DesiredCapabilities for a remote driver
DesiredCapabilities desiredCapabilities = DesiredCapabilities.internetExplorer();
desiredCapabilities.setCapability("nativeEvents", true);

When using Action Chains I have always found it more reliable to perform all the actions in the same chain. As such, rather than 'pausing' to find the now revealed element, try doing so within the chain.
WebElement mainElement = driver.findElement(By.xpath(<frame xpath >));
Actions builder = new Actions(driver);
builder.moveToElement(mainElement).moveToElement(driver.findElement(By.xpath("//*[#id='currentSkills']/div[1]/div/a"))).click().perform();
Hopefully that will help.

FirefoxProfile profile = new FirefoxProfile();
profile.setEnableNativeEvents(true);
driver = new FirefoxDriver(profile);
WebElement searchBtn = driver.findElement(By.xpath(""));
WebElement searchBtn1 = driver.findElement(By.xpath(""));
Actions action = new Actions(driver);
action.moveToElement(searchBtn).moveToElement(searchBtn1).click().build().perform();

My View here is Need to Perform Mouse Over on the Object to make it visible and then click on that element.
WebElement mainElement = driver.findElement(By.xpath(<frame xpath >));
Actions builder = new Actions(driver);
builder.moveToElement(mainElement).moveToElement(driver.findElement(By.xpath("//*[#id='currentSkills']/div[1]/div/a"))).build().perform();
driver.findElement(By.xpath("//*[#id='currentSkills']/div[1]/div/a")).click();
Please Let me know is the above scripting is working or not.

Related

how we perform scroll in table

I want to perform scroll down in web table but its not performing with a logic
JavascriptExecutor jse1 = (JavascriptExecutor) driver;
jse1.executeScript("window.scrollBy(0,200)");
Use EventFiringWebDriver.
Steps:
Launch the Web Application.
Locate the WebTable.
Use executeScript.
Below is the code:
eventFiringWebDriver eventFiringWebDriver = new EventFiringWebDriver(driver);
eventFiringWebDriver.executeScript("document.querySelector('.ui-grid-viewport.ng-isolate-scope').scrollTop=6000");
You can make use of Selenium's Actions class.
Steps:
Create your WebDriver instance
WebDriver driver = new ChromeDriver();
Create your Actions instance by passing the driver instance as parameter.
Actions actions = new Actions(driver)
Locate your element (table you want to scroll to)
WebElement element = driver.findElement(By.xpath("tableXpath"));
Move to the element
actions.moveToElement(element).perform();

How to clear the default values in the username textfield and enter my value in selenium webdriver

I have tried the following code but it is throwing the exception (ElementNotVisibleException)
FirefoxDriver dr = new FirefoxDriver();
dr.get("http://54.169.235.143/book.html?v=0.03");
System.out.println("First Testcase");
System.out.println(dr.findElement(By.id("user_name")));
dr.findElement(By.id("user_name"));
dr.findElement(By.id("user_name")).click();
dr.findElement(By.id("user_name")).getAttribute("user_name");
dr.findElement(By.id("user_name")).clear();
dr.findElement(By.id("user_name")).sendKeys("student100");
What am I doing wrong and how to fix it?
Actually your page taking time to load so web driver need wait until element gets visible , Below code will solve your issue :
WebDriverWait wait= new WebDriverWait(dr,30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("user_name")));
dr.findElement(By.id("user_name")).clear();
dr.findElement(By.id("user_name")).sendKeys("test");
wait= new WebDriverWait(dr,30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("pass_word")));
dr.findElement(By.id("pass_word")).clear();
dr.findElement(By.id("pass_word")).sendKeys("test");
I have just added wait for elements.
n software testing services this can be achieved by many ways some of the options are displayed above remaining are as follow.
Using java script
driver.executeScript("document.getElementByXpath('element').setAttribute('value', 'abc')");
Using action class Actions actions = new Actions(driver);
actions.click(driver.findElement(element) .keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).sendKeys(Keys.BACK_SPACE).build().perform());

How to select a hidden dropdown value in Selenium WebDriver using Java

I have a dropdown which is hidden at the moment it loads and with a button click it is set to visible and I can see it when the selenium is running it in the browser but still it gives me this exception
org.openqa.selenium.WebDriverException: ElementNotVisibleError: Element is not currently visible and may not be manipulated'ElementNotVisibleError: Element is not currently visible and may not be manipulated' when calling method: [wdIMouse::click] Command duration or timeout: 47 milliseconds
Can someone suggest how we can resolve this?
Try using Actions and WebDriverWait
Maybe something like this
Actions builder = new Actions(driver);
WebDriverWait wait = new WebDriverWait(driver);
Action clickTheDropDown = builder.moveToElement(dd).Click(otherElement).build();
clickTheDropDown.perform();
wait.Until(Expectedcondition.VisibilityOfElement(dd);

Unable to Drag and Drop for web driver in Firefox

Below is the code i tried
WebDriver driver = new FirefoxDriver();
driver.get("http://www.w3schools.com/html/html5_draganddrop.asp");
Actions builder = new Actions(driver);
WebElement src = driver.findElement(By.id("drag1"));
WebElement des = driver.findElement(By.id("div2"));
builder.clickAndHold(src).build().perform();
builder.moveToElement(des).build().perform();
builder.release(des).build().perform();
driver.manage().timeouts().implicitlyWait(3,TimeUnit.MINUTES);
I don't see the drag and drop operation happening, Although no error is returned in the console.
Am I missing any step here ?
Please give a try with following:
builder.dragAndDrop(src, des).build().perform();
If above doesn't help you, see if following helps:
http://elementalselenium.com/tips/39-drag-and-drop

Mouse clickAndHold() not working properly on Firefox Using Selenium Webdriver

I am using selenium webdriver client 2.39 and Firefox 26.
Mouse click and hold event does not work properly. My code is like
WebDriver driver=new FirefoxDriver();
driver.get("http://startingwithseleniumwebdriver.blogspot.com/2013/12/frmset1.html");
WebElement multiSelectDropDown=driver.findElement(By.name("multiselectdropdown"));
List<WebElement> dropdownlists = multiSelectDropDown.findElements(By.tagName("option"));
Actions builder=new Actions(driver);
builder.clickAndHold(dropdownlists.get(0)).
clickAndHold(dropdownlists.get(6)).click().build();
This code does not give any error but select only one element.
I can bypass this issue using other way but I want to know whay it is not working.
I face the same problem but it select the element from start to last and give some Error like
Cannot perform native interaction: Could not get node for element - cannot interact
I got the solution by this way you can do this for your problem
builder.clickAndHold(dropdownlists.get(0)).moveToElement(dropdownlists.get(6)).release().build().perform();
If you want to select multiple option from your list try this (it will select first 3 elements):
List<WebElement> elements = driver.findElements(By.xpath("//select[#name='multiselectdropdown']/option"));
for(int i = 0; i < 3; i++) {
new Actions(driver).keyDown(Keys.CONTROL).click(elements.get(i)).keyUp(Keys.CONTROL).perform();
}
ButtonUp (or release()) should be the next button-action following a ButtonDown (or clickAndHold()) button-action (see Appium notes for ButtonDown documentation). Your code performs two consecutive clickAndHolds() followed by a click() without performing a release(). It should be something like:
WebDriver driver=new FirefoxDriver();
driver.get("http://startingwithseleniumwebdriver.blogspot.com/2013/12/frmset1.html");
WebElement multiSelectDropDown=driver.findElement(By.name("multiselectdropdown"));
List<WebElement> dropdownlists = multiSelectDropDown.findElements(By.tagName("option"));
Actions builder=new Actions(driver);
builder.clickAndHold(dropdownlists.get(0)).moveTo(dropdownlists.get(6)).release().build();
While the linked documentation is not for Selenium, Appium is built on top of Selenium.

Categories