Selenium 盒阻塞元件有问题
我试图点击一个按钮“组”,它前面有一个对话框。首先,我通过单击“确定”来关闭对话框,但有时候selenium说它找不到“组”按钮,因为有东西挡住了它。其他时间它会正常运行,我不知道是什么原因偶尔会发生此问题 这是我的密码:Selenium 盒阻塞元件有问题,selenium,Selenium,我试图点击一个按钮“组”,它前面有一个对话框。首先,我通过单击“确定”来关闭对话框,但有时候selenium说它找不到“组”按钮,因为有东西挡住了它。其他时间它会正常运行,我不知道是什么原因偶尔会发生此问题 这是我的密码: upload_ok = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//button[@class='dialogButton primary']"))
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() && $parent.selectedTab().id === id && $parent.selectedTab().index() === index() ? '' : ' iframe-content-unselected') }" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen="" src="/prism/admin?embed=ba1&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,这意味着模式被隐藏。是的,在#等待模式消失下打印该行。好的,我知道了。非常感谢。