Selenium 盒阻塞元件有问题

Selenium 盒阻塞元件有问题,selenium,Selenium,我试图点击一个按钮“组”,它前面有一个对话框。首先,我通过单击“确定”来关闭对话框,但有时候selenium说它找不到“组”按钮,因为有东西挡住了它。其他时间它会正常运行,我不知道是什么原因偶尔会发生此问题 这是我的密码: upload_ok = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//button[@class='dialogButton primary']"))

我试图点击一个按钮“组”,它前面有一个对话框。首先,我通过单击“确定”来关闭对话框,但有时候selenium说它找不到“组”按钮,因为有东西挡住了它。其他时间它会正常运行,我不知道是什么原因偶尔会发生此问题

这是我的密码:

upload_ok = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//button[@class='dialogButton primary']")))
upload_ok.click()
groupstab = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//button[contains(text(),'Groups')]")))
groupstab.click()
这是HTML:

<iframe id="tab_Admin" name="frame_Admin" data-bind="iframeSrc: link, attr: { id: 'tab_' + id + (index() || ''), name: 'frame_' + id + (index() || ''), class: ($parent.headless() === true ? 'headless ': '')  + (rightSliderUrl ? 'right-slider-space ' : '') + 'iframe-content' + ($parent.selectedTab() &amp;&amp; $parent.selectedTab().id === id &amp;&amp; $parent.selectedTab().index() === index() ? '' : ' iframe-content-unselected') }" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen="" src="/prism/admin?embed=ba1&amp;openTab=monitor" class="iframe-content">
    #document
        <!DOCTYPE html>

        <head></head>
    <body role="application" "="">
       <div class="main-content" id="mainContent">
        <div class="pageView adminView" style="">
            <div class="tabs>
                <button tab="0" class="selected">Users</button>
                <button tab="1">Groups</button>
                <button tab="2">Lifecycle Management</button>
                <button tab="3">Features</button>
                <button tab="4" class="">Databases</button>
            </div>
        </div>
      </div>

    <div id="modalDialog_11" class="dialogBlocker show" style="height: 606px;">
            <div id="modalDialog_11Container" class="dialogBlockerCell adminDialog">
                <div class="modalDialog" tabindex="0" role="dialog">
                    <div class="dialogContent">
                        <h1>Success!</h1>
                        <div class="msg">
                            Your file 'users.csv' has been successfuly uploaded.<br>
                            </div>
                            <br>
                            </div>
                        <footer style="margin-right: 20px;">
                            <button class="dialogButton primary" aria-label="OK" role="button" tabindex="1">OK
                            </button>
                        </footer>
                     </div>
                </div>
          </div>
    </body>
</iframe>

#文件
使用者
组
生命周期管理
特征
数据库
成功!
您的文件“users.csv”已成功上载。

好啊
我不知道是否与元素class=“dialogBlocker show”有关,该元素使页面的其余部分在框后变灰。 以下是它的屏幕截图:

有人有主意吗?
谢谢。

根据您提供的HTML,这看起来像是一个模式,而不是警报。您可以像使用普通HTML元素一样使用模态。您可能需要在模式关闭时添加一个
wait
,以便在模式完全隐藏之前不定位

我获取了您的示例代码,并添加了一行额外的代码,以等待模式对话框的
invisibility\u:

# wait to click OK
upload_ok = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//button[@class='dialogButton primary']")))

# click OK
upload_ok.click()

# wait on modal to disappear
WebDriverWait(driver, 10).until(
            EC.invisibility_of_element_located((By.XPATH, "//div[contains(@class, 'dialogBlocker')]")))

# wait on groups tab
groupstab = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//button[contains(text(),'Groups')]")))

# click groups tab
groupstab.click()
groupstab
上的
wait
几乎总是成功的,因为元素存在于模态下面,并且仍然在DOM上。因此,如果模式在单击之前没有完全消失,那么您收到的
ClickIntercepted
错误是有意义的

另一种选择是尝试用Javascript点击
groupstab
,而不是
groupstab.click()


根据您提供的HTML,这看起来像是一个模式,而不是一个警报。您可以像使用普通HTML元素一样使用模态。您可能需要在模式关闭时添加一个
wait
,以便在模式完全隐藏之前不定位

我获取了您的示例代码,并添加了一行额外的代码,以等待模式对话框的
invisibility\u:

# wait to click OK
upload_ok = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//button[@class='dialogButton primary']")))

# click OK
upload_ok.click()

# wait on modal to disappear
WebDriverWait(driver, 10).until(
            EC.invisibility_of_element_located((By.XPATH, "//div[contains(@class, 'dialogBlocker')]")))

# wait on groups tab
groupstab = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//button[contains(text(),'Groups')]")))

# click groups tab
groupstab.click()
groupstab
上的
wait
几乎总是成功的,因为元素存在于模态下面,并且仍然在DOM上。因此,如果模式在单击之前没有完全消失,那么您收到的
ClickIntercepted
错误是有意义的

另一种选择是尝试用Javascript点击
groupstab
,而不是
groupstab.click()


你能在点击“确定”按钮之前和之后共享html吗?html完全相同,但没有最后一个div。。。。。。我点击“用户”选项卡中的“上传用户”按钮,将路径发送到a,然后弹出对话框说它是sucessful@Luiz当前位置你能试试我的解决方案并告诉我结果吗。你能分享你收到的错误信息吗?你是否先切换到
iframe
?你能在点击OK按钮之前和之后分享html吗?html完全相同,但没有最后一个div。。。。。。我点击“用户”选项卡中的“上传用户”按钮,将路径发送到a,然后弹出对话框说它是sucessful@Luiz当前位置你能试试我的解决方案并告诉我结果吗。你能分享你得到的确切错误信息吗?你是不是先切换到
iframe
?我对HTML的了解非常有限,我不知道modals是什么。谢谢你的回答,它似乎已经工作,我去了第一个选项,我运行了代码3次,没有得到一个错误!但是我有一个问题,如果我打印你的行,它显示“True”,这是因为元素不可见还是因为找到了模态元素??你打印的是哪一行?如果您在
#等待模式消失
下打印该行,则一旦满足
EC
要求,该行将打印为true,这意味着模式被隐藏。是的,在#等待模式消失下打印该行。好的,我知道了。非常感谢。我对HTML的了解非常有限,我不知道modals是什么。谢谢你的回答,它似乎已经工作,我去了第一个选项,我运行了代码3次,没有得到一个错误!但是我有一个问题,如果我打印你的行,它显示“True”,这是因为元素不可见还是因为找到了模态元素??你打印的是哪一行?如果您在
#等待模式消失
下打印该行,则一旦满足
EC
要求,该行将打印为true,这意味着模式被隐藏。是的,在#等待模式消失下打印该行。好的,我知道了。非常感谢。