3

There are 2 buttons in a page, and the difference between these 2 buttons is "onclick".

<button class="btn btn-primary" style="width: 96px;" type="button" id="YesBtn" onclick="check_security('security_div0')">OK</button>

<button class="btn btn-primary" style="width: 96px;" type="button" id="YesBtn" onclick="check_security('wlan1security_div0')">OK</button>

I was thinking to use xpath:

driver.find_element_by_xpath("//form[@id='update-container-id']/div/div/div/div[2]/div/div[2]/table[1]/tbody/tr[1]/td[8]/div[3]/div/div/div/div[3]/button").click()

But it responses the error as below:

selenium.common.exceptions.ElementNotInteractableException: Message: Element <button id="YesBtn" class="btn btn-primary" type="button"> could not be scrolled into view

Does anyone can help me to click the 2nd button correctly? Thanks a lot.

1
  • Share the method which you used the xpath on it Commented Jul 19, 2018 at 6:26

5 Answers 5

2

try with the x-path //button[@onclick="check_security('wlan1security_div0')"]

driver.find_element_by_xpath("//button[@onclick=\"check_security('wlan1security_div0')\"]").click()

Using Action class,

button = driver.find_element_by_xpath("//button[@onclick=\"check_security('wlan1security_div0')\"]")
ActionChains(driver).move_to_element(button).click(button).perform()

using java script executor,

driver.execute_script("javascript:check_security('wlan1security_div0')")
Sign up to request clarification or add additional context in comments.

1 Comment

I use the x-path method, and it works. Thanks for your help.
1

As per the HTML you have provided, to click on the button using the onclick() event you can use the following solution:

  • First Element(css_selector):

    driver.find_element_by_css_selector("button.btn.btn-primary#YesBtn[onclick*='security_div0']").click()
    
  • First Element(xpath):

    driver.find_element_by_xpath("//button[@class='btn btn-primary' and @id='YesBtn'][@onclick=\"check_security('security_div0')\"]").click()
    
  • Second Element(css_selector):

    driver.find_element_by_css_selector("button.btn.btn-primary#YesBtn[onclick*='wlan1security_div0']").click()
    
  • Second Element(xpath):

    driver.find_element_by_xpath("//button[@class='btn btn-primary' and @id='YesBtn'][@onclick=\"check_security('wlan1security_div0')\"]").click()
    

1 Comment

I prefer to use the x-path method, and it also works. Thanks for your help.
1

First and foremost, you are using a really long xpath which will be difficult to maintain. You can narrow it down further.

Now, some xpaths you can try:

1) Get the second button with the id YesBtn (assuming there are only two buttons with that attribute) :

driver.find_element_by_xpath("(//button[@id= 'YesBtn'])[2]");

2) Find by the onclick attribute:

driver.find_element_by_xpath("//button[@onclick= \'check_security(\'wlan1security_div0\')\']");

Comments

0

button1 with HTML :

<button class="btn btn-primary" style="width: 96px;" type="button" id="YesBtn" onclick="check_security('security_div0')">OK</button>  

XPATH :

//button[text()='OK' and @onclick="check_security('security_div0')"] 

button2 with HTML :

<button class="btn btn-primary" style="width: 96px;" type="button" id="YesBtn" onclick="check_security('wlan1security_div0')">OK</button>  

HTML:

//button[text()='OK' and @onclick="check_security('wlan1security_div0')"]

Comments

0
try:
  buttonVar = browser.find_element_by_css_selector(cssSel)
  ActionChains(browser).move_to_element(buttonVar).click(buttonVar ).perform()

except Exception as ex:
  print("button not found)

Firefox gives you several option you can use with selenium find_element or elements;

  1. by pressing f12 to bring up the inspector,
  2. use the "pick an item" icon in the left corner to select the item you want to view.
  3. This will highlight the text for that item in the inspector, which you can then right click on to bring up a menu where you select "copy" where there are at least 2 find_element options, css_selecor & xpath.

I personally don't like xpath. They are sometimes long & unruly to work with but whatever suits your style. In my case css_selector works fine.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.