I have a grid which displays some records. When I click on a record and inspect that element it is shown that it is hidden but it is visible in the grid.
My HTML is:
<a href="http://192.168.1.6/eprint_prod_3.8/settings/othercost_add.aspx?type=edit&id=805" title="Plastic Spiral Bind"
<div style="float: left; width: 99%; overflow: hidden; height: 15px; overflow: hidden"> Plastic Spiral Bind </div>
</a>
The above code is hidden while inspecting but it is visible in grid.
Selenium code:
driver.findElement(By.partialLinkText("Plastic Spiral Bind")).click();
-
3Seems to be an FAQ item : code.google.com/p/selenium/wiki/…? You would require javascript.Jayan– Jayan2014年03月01日 05:00:52 +00:00Commented Mar 1, 2014 at 5:00
-
@Santhosh.S - What is the issue you are facing ? Is the .click() not working?StrikerVillain– StrikerVillain2014年03月01日 09:06:58 +00:00Commented Mar 1, 2014 at 9:06
7 Answers 7
First store that element in object, let's say element
and then write following code to click on that hidden element:
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", element);
3 Comments
You have two approaches. Selenium has been specifically written to NOT allow interaction with hidden elements. The rational is that if a person cannot perform that action, then neither should Selenium. Therefore, to perform the click via Selenium, you must perform the action a user would do to make that button visible (e.g mouse over event, click another element, etc) then perform the click once visible.
However, Selenium does allow you to execute Javascript within the context of an element, so you could write Javascript to perform the click event even if it is hidden.
My preference is to always try and perform the actions to make the button visible
Here is the script in Python.
You cannot click on elements in selenium that are hidden. However, you can execute JavaScript to click on the hidden element for you.
element = driver.find_element_by_id(buttonID)
driver.execute_script("$(arguments[0]).click();", element)
Comments
overflow:hidden
does not always mean that the element is hidden or non existent in the DOM, it means that the overflowing chars that do not fit in the element are being trimmed. Basically it means that do not show scrollbar even if it should be showed, so in your case the link with text
Plastic Spiral Bind
could possibly be shown as "Plastic Spir..." or similar. So it is possible, that this linkText indeed is non existent.
So you can probably try:
driver.findElement(By.partialLinkText("Plastic ")).click();
or xpath:
//a[contains(@title, \"Plastic Spiral Bind\")]
Comments
I did it with jQuery:
page.execute_script %Q{ $('#some_id').prop('checked', true) }
Comments
If the <div>
has id or name then you can use find_element_by_id
or find_element_by_name
You can also try with class name, css and xpath
find_element_by_class_name
find_element_by_css_selector
find_element_by_xpath
1 Comment
Use an XPath of the link by using Selenium IDE to click the element:
driver.findelement(By.xpath("//a[contains(@title, \"Plastic Spiral Bind\")]")).click();
Comments
Explore related questions
See similar questions with these tags.