click() on css Selector not working in Selenium webdriver
Solution 1
i would inject piece of js to be confident in resolving this issue:
first of all locate element using DOM (verify in firebug):
public void jsClick(){
JavascriptExecutor js = (JavascriptExecutor) driver;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("document.getElementsByTagName('button')[0].click();");
js.executeScript(stringBuilder.toString());
}
jsClick();
from the retrospective of your element it be like:
....
stringBuilder.append("document.getElementsByTagName('input')[0].click();");
....
Please, note: document.getElementsByTagName('input')
returns you an array of DOM elements. And indexing it properly e.g. document.getElementsByTagName('input')[0], document.getElementsByTagName('input')1, document.getElementsByTagName('input')[2]....
,etc you will be able to locate your element.
Hope this helps you. Regards.
Solution 2
Please use the below code.
driver.findElement(By.cssSelector("input[value=\"Search\"]")).click();
It works for me. And make sure that the name is "Search", coz it is case sensitive.
Thanks
user1769790
Updated on March 12, 2020Comments
-
user1769790 over 4 years
HTML
<input class="button" type="button" onclick="$.reload('results')" value="Search">
I don't have an id or name for this . Hence am writing
FirefoxDriver driver = new FirefoxDriver(); driver.get("http://...."); driver.findElement(By.cssSelector("input[value=Search]")).click();
But click() is not happening.
Tried driver.findElement(By.cssSelector(".button[value=Search]")).click();
Tried value='Search' (single quotes).
these Selectors are working in
.button[value=Search] { padding: 10px; } input[value=Search] { padding: 10px; }
-
user1769790 over 11 yearsThis helped to find the element, but click() not happening. driver not executing the click(); is it because i have my onclick event to this input?
-
eugene.polschikov over 11 yearswell, try to locate your error step by step. open your page in firefox, open firebug, open console in firebug and simply try to execute following piece of code in console: document.getElementsByTagName('button')[0].click() and see what happens
-
eugene.polschikov over 11 yearsjavascript 'click' approach is robust and always works for me. If nothing happens - you should check carefully that you've found web element properly
-
user1769790 over 11 years'Run' on document.getElementsByTagName('button')[5].click(); working absolutely fine. I just have this public void jsClick(){ JavascriptExecutor js = (JavascriptExecutor) driver; StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("document.getElementsByTagName('button')[0].click();"); js.executeScript(stringBuilder.toString()); } jsClick();
-
eugene.polschikov over 11 yearsnice) so as you can see in this public jsClick you mention improper arg order. change 'document.getElementsByTagName('button')[0]' to 'document.getElementsByTagName('button')[5]'. So as I can see it be: public void jsClick(){ JavascriptExecutor js = (JavascriptExecutor) driver; StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("document.getElementsByTagName('button')[5].click();"); js.executeScript(stringBuilder.toString()); } jsClick();
-
user1769790 over 11 yearsstep-by-step debug mode; it executes click() but when i run just this code (Run as Java Application) it is not executing. I think need a wait time of some seconds before executing the script (may be) or any idea why it works in debug (step over line by line of code) and why not when i run the application.
-
eugene.polschikov over 11 yearsadd driver.manage().timeouts().implicitlyWait(4,TimeUnit.SECONDS) between driver.get("http://...."); and performing click operation. it should help