Selenium 如何解决警报关闭和document.readyState之间的同步问题

Selenium 如何解决警报关闭和document.readyState之间的同步问题,selenium,Selenium,我有以下通用VB代码: *测试代码:调用Selenium设置键并填充web表单上的多个字段 *测试代码:然后使用OnChange事件调用Html输入元素上的设置键 *Selenium将值插入文本框 *OnChange事件触发调用Javascript函数 *JS函数显示警报或确认对话框 *测试代码:从对话框获取文本: DialogText=DriverObj.SwitchTo().Alert().Text *测试代码:关闭对话框 DriverObj.SwitchTo().Alert().Accep

我有以下通用VB代码:
*测试代码:调用Selenium设置键并填充web表单上的多个字段


*测试代码:然后使用OnChange事件调用Html输入元素上的设置键


*Selenium将值插入文本框


*OnChange事件触发调用Javascript函数


*JS函数显示警报或确认对话框


*测试代码:从对话框获取文本:


DialogText=DriverObj.SwitchTo().Alert().Text


*测试代码:关闭对话框
DriverObj.SwitchTo().Alert().Accept()

()
*然后我最终调用Executescript:“return document.readyState”


我得到:OpenQA.Selenium.unhandleAlertException:“存在模态对话框”


我正在调试模式下运行VB。所以我看到了这种情况:



1)测试代码启动IE。

IE显示为顶部窗口。

2) 测试代码填写在web表单中。

3) 测试代码用OnChange事件填充文本框。

4) 代码在断点处停止。

Visual Studio现在显示为顶部窗口。

IE显示在后台。

5) DriverObj.SwitchTo().Alert().Text成功获取对话框文本。

6) DriverObj.SwitchTo().Alert().Accept()成功运行。

7) 代码获取ExecuteScript“return document.readyState”。

8) IE窗口显示在VS窗口的前面。

9) 对话框显示在IE中。

10) 代码执行ExecuteScript“return document.readyState”。

11) 代码显示异常:OpenQA.Selenium.UnhandleAlertException:“存在模态对话框”。
我尝试在用Accept()关闭DriverObj.SwitchTo().Alert()后调用DriverObj.SwitchTo().Alert(),以确保对话框已消失,但仍然出现“模态对话框存在”异常。

在调用“return document.readyState”之前,如何确保IE完全完成显示和关闭对话框?

在这种情况下,您可以尝试:

WebDriverWait wait = new WebDriverWait(driver, 30);
// Wait until alert is NOT present
wait.until(ExpectedConditions.not(ExpectedConditions.alertIsPresent()));
// OR Wait until number of windows is 1 i.e. main content
wait.until(ExpectedConditions.numberOfWindowsToBe(1));