【问题标题】:Element is not clickable because another element obscures it元素不可点击,因为另一个元素遮住了它
【发布时间】:2019-07-05 10:14:51
【问题描述】:

功能:

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)

虽然我的第二个函数是一个不好的做法,第一个函数应该是一个改进,但我没有使用我的第二个函数得到那个异常。我怎样才能调整我的第一个共享函数来摆脱那个错误。

请注意,代码是对类似函数的连续调用,例如:

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() 函数之外单独为它们单独编写代码非常困难。

【问题讨论】:

  • discussion 对您有帮助吗?
  • @DebanjanB 我已经看到了那个答案,但没有发现任何东西可以解释为什么我的初始功能运行良好,但“改进”版本特别抛出了我是新手的异常。
  • 嗯,我仍然没有看到你正确处理pop up。您是否需要在pop up 中单击以使其消失或自行消失?可能是 pop up 导致您的问题
  • 会弹出一个新窗口,我必须点击上面的某个元素。

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


【解决方案1】:

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

def waitforload():
    wait.until(lambda d: d.execute_script(
        'return (document.readyState == "complete" || document.readyState == "interactive")'))


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 2018-08-21
    • 2021-05-29
    • 2018-12-19
    • 1970-01-01
    • 2021-07-27
    相关资源
    最近更新 更多