John Writher
John Writher

Reputation: 21

IF / THEN Statement in Selenium

I run this code

#Gets to the Calendar for the week with the Login Details

calendar = driver.get('https://www.investing.com/economic-calendar/')

time.sleep(5)

driver.find_element_by_xpath('/html/body/div[9]/div[3]')

driver.find_element_by_xpath('//*[@id="onetrust-accept-btn-handler"]').click()

time.sleep(5)

driver.find_element_by_xpath('/html/body/div[10]/div')

driver.find_element_by_xpath('/html/body/div[10]/div/div[4]/button[1]').click()

Sometimes I successful sometimes I get error

ElementClickInterceptedException: element click intercepted: Element <a onclick="overlay.overlayLogin();" href="javascript:void(0);" class="login bold">...</a> is not clickable at point (821, 19). Other element would receive the click: <div class="allow-notifications-popup-wrapper shown">...</div>
  (Session info: chrome=84.0.4147.135)

Because a naughty pop-up/alert doesn't always appear.

How can I write a IF (pop up is there) THEN click it

OR

IF pop-not there skip the following two lines?

Thanks

Upvotes: 2

Views: 167

Answers (3)

Amruta
Amruta

Reputation: 1166

JavaScript click will work however it bypassed the actual reason which may be a potential bug.

ElementClickInterceptedException: element click intercepted:

This Exception can occur due to multiple reasons. As per selenium docs reason for above exception is:

Indicates that a click could not be properly executed because the target element was obscured in some way.

To resolve this issue you can use webdriverwait and then check if element is clickable and then click on it

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "YOURXPATH']"))).click()

Refer https://selenium-python.readthedocs.io/waits.html

Upvotes: 1

Arundeep Chohan
Arundeep Chohan

Reputation: 9969

WebElement ele = driver.findElement(By.xpath("element_xpath"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);

Should be able to bypass the pop-up entirely.

Upvotes: 2

Nadavo
Nadavo

Reputation: 250

there might be a lot of ways to solve youre problem, but since you are basically trying to avoid a situation leading to this exact error, i think it will be the simplest to use a TRY/EXCEPT:

try:
    driver.find_element_by_xpath('/html/body/div[10]/div/div[4]/button[1]').click()
except ElementClickInterceptedException:
    pass

does it solve your problem?

Upvotes: 1

Related Questions