python - 元素不可点击,因为另一个元素遮挡了它

标签 python 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)

虽然我的第二个函数是一个不好的做法,第一个函数应该是一个改进,但我没有使用第二个函数得到该异常。我如何调整我的第一个共享函数以消除该错误。

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

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() 函数之外不手动为它们单独编写代码而摆脱这种情况非常困难。

最佳答案

您可以尝试等待 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()

关于python - 元素不可点击,因为另一个元素遮挡了它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54638683/

相关文章:

python - 如何在 Python 中使用 Selenium?

python - 将变量从 view.py 导入后。表单中没有出现下拉菜单

python - 如何检查连续相同的值和值的计数同时出现 pandas

java - 从 Selenium IDE 以 Excel 格式记录测试用例

python - Amazon Ubuntu Server (EC2) 上的 Selenium 未打开某些链接,但在本地计算机上运行良好

python-3.x - Pandas:将 periodIndex 转换为多索引(年、月)

python - 用逗号分割字符串列表

python - 从 DNS 接收应答是否需要 root/更高权限

python - 检查三分之二是否相等

python-3.x - 使用 groupby 从 Dataframe 中堆积条形图