HTML解析器如何确定<div>是'模态对话'?</div>

时间:2012-09-27 06:40:45

标签: html modal-dialog

据我所知,模式对话框是一个警告或子窗口,根据Wikipedia,“要求用户在返回操作父应用程序之前与其进行交互”。

我在HTML页面中找到的模态对话框的所有实例都是简单的<div>元素,如JQuery dialogs。其中一些实际上阻止了主页与覆盖的用户交互,但有些甚至不是'模态',因为用户可以在对话存在时轻松地与主页交互。

我问这个是因为我得到了一个UnhandledAlertException:“模态对话框出现”我的一个Selenium测试。我想知道:Selenium如何知道模态对话框存在?在HTML页面上看到许多<div>个元素,使其中一个成为“对话框”的特殊属性是什么?什么是导致对话变为'模态'的第二个属性?

2 个答案:

答案 0 :(得分:1)

伪模式对话框在大多数情况下是两个div,一个覆盖整个窗口是透明的或有色的,而另一个div则代表实际的对话框(或者单个div同时执行两者的组合)。 p>

要检测到这一点,您需要遍历dom以找到最大尺寸(接近窗口大小)的div,位于位置0,0并且位置属性设置为绝对或固定,以及它是z-索引。

然而,无法保证这适用于所有情况(并且存在各种实现),这意味着检测例程只能做出很好的猜测。

答案 1 :(得分:0)

模态对话框是一个单独的窗口,可以在关闭对话框之前禁用开启窗口。您可以使用window.showModalDialog method打开模式对话框。

在这种意义上,页面中元素的对话框不是模态的。即使它覆盖了带有覆盖的页面中的所有内容,因此您无法与其进行交互,也不会禁用该页面。它只具有与模态对话框相同的实际效果。

作为页面中元素的对话框甚至不是真正的对话框,它只能在大多数实际意义上像对话框一样工作。

这样的“假”对话通常更可取,因为真正的模态对话框需要自己的HTML文档。作为页面中元素的对话框更易于设置,并且更易于与页面交互。