0

我知道模态对话框是一个警报或子窗口,根据Wikipedia的说法,“要求用户在返回操作父应用程序之前与其交互”。

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

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

4

2 回答 2

1

在大多数情况下,伪模态对话框是两个 div,一个覆盖整个窗口,透明或着色,而另一个 div 位于其顶部,表示实际对话框(或单个 div 两者兼而有之的组合)。

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

但是,不能保证这适用于每种情况(并且存在各种实现),这意味着检测例程只能进行良好的猜测。

于 2012-09-27T07:08:46.073 回答
0

模态对话框是一个单独的窗口,它会在您关闭对话框之前保持打开窗口处于禁用状态。您可以使用该window.showModalDialog方法打开一个模态对话框。

从这个意义上说,作为页面元素的对话框不是模态的。即使它使用覆盖覆盖页面中的所有内容以使您无法与之交互,该页面也不会被禁用。它仅具有与模态对话框相同的实际效果。

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

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

于 2012-09-27T06:55:31.693 回答