Selenium无法点击元素,因为其他元素会遮挡它

时间:2018-04-19 12:27:38

标签: python selenium element

设置向上

我使用Python 3.x和Selenium填写查询字段,然后点击搜索按钮,

# element containing the product search bar and buttons
search_area = el_id('Products').find_element_by_class_name('searchArea')

# insert name of file to be duplicated
name_field = search_area.find_element_by_xpath("//input[@type='text']")
name_field.clear()
name_field.send_keys('to_be_duplicated')  

# click search button
search_area.find_element_by_xpath('span/a[1]').click()

其中el_id(x) = browser.find_element_by_id(x)

问题

执行上面的代码会产生以下错误,

ElementClickInterceptedException: Element <a class="button button-fleft searchButton" href="#"> is not clickable at point (577.6166763305664,225.06666564941406) because another element <div class="blockUI blockOverlay"> obscures it

我可以通过在抓取并单击按钮之前插入硬等待来解决此错误,如此,

# click search button
time.sleep(1)
search_area.find_element_by_xpath('span/a[1]').click()

但我宁愿以不同的方式解决它,所以我跟着this answer并执行了以下操作,

# click search button
search_button = search_area.find_element_by_xpath('span/a[1]')
WebDriverWait(driver, 10).until_not(EC.visibility_of_element_located((By.XPATH, 
"//*[@id="Products"]/tbody/tr[1]/td/div/input")))
search_button.click()

但我得到完全相同的错误。

我也试过this answer,但同样的错误。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

有几种方法可以做到这一点,其中一种方法是Javascript执行者。

你可以说:

class = 'blockUI blockOverlay'

这样,您可以使用{{1}}阻止div 如果我正确的话,你可以点击你的元素。

答案 1 :(得分:4)

DebanjanB's answer的nr.5之后,我通过暗示代码在尝试点击之前等待临时叠加层消失来解决它,

wait.until(EC.invisibility_of_element_located((By.XPATH,
              "//div[@class='blockUI blockOverlay']")))
el_xp("//input[@value='Save']").click()

答案 2 :(得分:1)

此外,您可以尝试通过node单击元素,如下所示:

JavaScript