click() on css Selector not working in Selenium webdriver

20,511

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): locating

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

Share:
20,511
user1769790
Author by

user1769790

Updated on March 12, 2020

Comments

  • user1769790
    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
    user1769790 over 11 years
    This 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
    eugene.polschikov over 11 years
    well, 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
    eugene.polschikov over 11 years
    javascript 'click' approach is robust and always works for me. If nothing happens - you should check carefully that you've found web element properly
  • user1769790
    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
    eugene.polschikov over 11 years
    nice) 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
    user1769790 over 11 years
    step-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
    eugene.polschikov over 11 years
    add driver.manage().timeouts().implicitlyWait(4,TimeUnit.SECONDS‌​) between driver.get("http://...."); and performing click operation. it should help