我试图单击前面有一个对话框的“组”按钮。首先,我通过单击“确定”关闭对话框,将其关闭,但是硒表示有时找不到“组”按钮,因为有东西在阻止它。有时它将运行正常,我不知道是什么原因导致此问题偶尔发生。
这是我的代码:
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>
我不知道是否与元素class =“ dialogBlocker show”有关,这使得页面的其余部分在框的后面变为灰色。 这是它的屏幕截图:
有人知道吗? 谢谢。
答案 0 :(得分:2)
基于您提供的HTML,这看起来像是模式而不是警报。您只需使用模式,就好像它是普通的HTML元素一样。您可能必须在模式关闭时添加一个wait
,以便在完全隐藏模式之前找不到Groups
。
我带了您的示例代码,并添加了一行附加内容,以等待invisibility_of
进入模式对话框:
# 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()
wait
上的groupstab
几乎总是会成功,因为该元素位于模式下方,并且仍位于DOM上。因此,如果模态在单击之前没有完全消失,那么您会收到ClickIntercepted
错误是有道理的。
另一种选择是尝试点击groupstab
而不是groupstab.click()
来使用Javascript:
driver.execute_script("arguments[0].click();", groupstab)