据我所知,模式对话框是一个警告或子窗口,根据Wikipedia,“要求用户在返回操作父应用程序之前与其进行交互”。
我在HTML页面中找到的模态对话框的所有实例都是简单的<div>
元素,如JQuery dialogs。其中一些实际上阻止了主页与覆盖的用户交互,但有些甚至不是'模态',因为用户可以在对话存在时轻松地与主页交互。
我问这个是因为我得到了一个UnhandledAlertException:“模态对话框出现”我的一个Selenium测试。我想知道:Selenium如何知道模态对话框存在?在HTML页面上看到许多<div>
个元素,使其中一个成为“对话框”的特殊属性是什么?什么是导致对话变为'模态'的第二个属性?
答案 0 :(得分:1)
伪模式对话框在大多数情况下是两个div,一个覆盖整个窗口是透明的或有色的,而另一个div则代表实际的对话框(或者单个div同时执行两者的组合)。 p>
要检测到这一点,您需要遍历dom以找到最大尺寸(接近窗口大小)的div,位于位置0,0并且位置属性设置为绝对或固定,以及它是z-索引。
然而,无法保证这适用于所有情况(并且存在各种实现),这意味着检测例程只能做出很好的猜测。
答案 1 :(得分:0)
模态对话框是一个单独的窗口,可以在关闭对话框之前禁用开启窗口。您可以使用window.showModalDialog
method打开模式对话框。
在这种意义上,页面中元素的对话框不是模态的。即使它覆盖了带有覆盖的页面中的所有内容,因此您无法与其进行交互,也不会禁用该页面。它只具有与模态对话框相同的实际效果。
作为页面中元素的对话框甚至不是真正的对话框,它只能在大多数实际意义上像对话框一样工作。
这样的“假”对话通常更可取,因为真正的模态对话框需要自己的HTML文档。作为页面中元素的对话框更易于设置,并且更易于与页面交互。