gpt4 book ai didi

javascript - 如何查找已使用 WatiN 打开的 JavaScript 警报

转载 作者:行者123 更新时间:2023-11-29 15:36:46 25 4
gpt4 key购买 nike

我结合使用 SpecFlow、用于单元测试的 MSTests 和 WatiN 来驱动浏览器来测试我们的 Web 应用程序。

  • Visual Studio 2010
  • 类库风格的项目
  • 规范流
  • MS 测试
  • 等待

如果用户提交我们的表单而没有填写所有必填字段,则会弹出一个 JavaScript alert。我正在尝试使用 WatiN 检测此弹出窗口。触发警报的 SpecFlow 步骤不同于断言弹出窗口存在的 SpecFlow 步骤,因此等待 WatiN 对话框处理程序不起作用,因为警报已经打开。

示例 SpecFlow 场景:

Scenario: Form Fields are required
# This step spawns the alert dialog
When I click the "Save and Continue" button
# Test fails here because the alert is already open
Then I should see the validation error alert

当我单击“保存并继续”按钮时的步骤定义

[When(@"I click the ""(.*)"" button")]
public void WhenIClickTheButton(string buttonText)
{
Button button = BitWeb.Browser.Button(Find.ByValue(buttonText).Or(Find.ByText(buttonText)));
Assert.IsTrue(button.Exists, "No button with text '{0}' was found", buttonText);
button.Click();
browser.WaitForComplete();
}

的步骤定义然后我应该看到...警报:

[Then(@"I should see the validation error alert")]
public void ThenIShouldSeeTheValidationErrorAlert()
{
var alert = new WatiN.Core.DialogHandlers.AlertDialogHandler();

alert.WaitUntilExists();

StringAssert.Contains(alert.Message, "An error has occurred. Check entire", "The validation error alert was not visible.");
}

调用 alert.WaitUntilExists(); 抛出异常:

WatiN.Core.Exceptions.WatiNException: Dialog not available within 30 seconds.

当我断言警报对话框可见时,DialogHandler 找不到警报,因为它已经打开。

如何找到已使用 WatiN 打开的警告对话框?

更新 #1: 我倾向于使用 ScenarioContext.Current 对象的解决方案,我只是不确定如何将它们连接在一起,所以浏览器不会在每次单击按钮时都等待 30 秒,只是为了查看是否弹出警告框。

更新 #2:经过一番调查,一步点击按钮会导致整个测试框架暂停,直到 alert 对话框被关闭。单击“确定”按钮关闭对话框,这允许测试运行程序前进到下一步,我断言对话框可见——先有鸡还是先有蛋的场景。调用 button.ClickNoWait() 解决了这个问题。

最佳答案

让我为你写一个更完整的例子:

public partial class Form1 : Form
{
//
// Your class properites/variables
//
AlertDialogHandler dialogHandler;


[DllImport("User32.dll")]
public static extern Int32 FindWindow(String lpClassName, String lpWindowName);

//
// Some methods/functions declarations
//

public void SomeInitMethod()
{
dialogHandler = new AlertDialogHandler()
browse.AddDialogHandler(dialogHandler);
}

public void SampleMethod()
{
IntPtr hwndTmp = (IntPtr)FindWindow("#32770", "Dialog Title");
WatiN.Core.Native.Windows.Window popUpDialog = new Window(hwndTmp);
dialogHandler.HandleDialog(popUpDialog);
//
// The line above will find the OK button for you and click on it,
// from here you continue with the rest of your code.

}

}

希望这有点但更清楚。

关于javascript - 如何查找已使用 WatiN 打开的 JavaScript 警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27507706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com