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

问题描述 投票:1回答:1

功能:

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()函数之外逐个案例地手动编写代码非常困难。

python python-3.x selenium selenium-webdriver click
1个回答
0
投票

您可以尝试等到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()
© www.soinside.com 2019 - 2024. All rights reserved.