元素不可点击,因为另一个元素将其遮盖

时间:2019-02-11 20:32:57

标签: python-3.x selenium selenium-webdriver click

功能:

def twoclicks(idoutter,idinner):
    wait = WebDriverWait(driver, 20)
    wait.until(EC.element_to_be_clickable((By.XPATH, "//input[contains(@id," + idoutter + ") and @value='...']"))).click()
    sleep(5)
    wait.until(EC.element_to_be_clickable((By.ID, idinner))).click()

此功能用于单击元素,然后在几秒钟后弹出一个窗口,然后单击弹出窗口中的元素。

尽管我尝试在函数中添加sleep(),但我仍然遇到该错误,并且不一致,因为有时我会收到,而其他人则不会。

我以前的功能是:

def twoclicks(idoutter,idinner):
    outter = driver.find_element_by_xpath("//input[contains(@id," + idoutter + ") and @value='...']")
    outter.click()
    sleep(10)
    driver.find_element_by_id(idinner).click()
     sleep(7)

虽然我的第二个函数是一个不好的实践,第一个函数应该是一个改进,但是我没有使用第二个函数来解决该异常,但是我该如何调整我的第一个共享函数以消除该错误。 / p>

请注意,代码是对类似功能的连续调用:

twoclicks("'button1'", 'button2')
twoclicks("'button3'", 'button4')

div遮盖了它:

<div class="rich-mpnl-mask-div-opaque rich-mpnl-mask-div" id="PWBFormID:managerModalPanelDiv" style="z-index: -1;"><button class="rich-mpnl-button" id="PWBFormID:managerModalPanelFirstHref"></button></div>

在html中(检查时)为灰色。

我看到许多方法,例如使用execute_script()来阻止div与上面的共享类,但是问题是我正在使用它的一个功能,并且有数十个按钮不会出现该问题或可能具有它具有不同的类,这使得摆脱这种情况而无需在twoclicks()函数外部逐个案例地手动编写代码非常困难。

1 个答案:

答案 0 :(得分:0)

您可以尝试等到Javascript完成。请尝试以下等待方法:

#nav li {
    margin: 0 5px;
    padding: 0 0 8px;
    float: right;
    position: relative;
    list-style: none;

}