основываясь на ответе @Tybs, я управлял вспомогательным классом.
public class NoReloadVerificationContext : IDisposable
{
private readonly IWebElement bodyElement;
public NoReloadVerificationContext(IWebDriver webDriver)
{
this.bodyElement = webDriver.FindElement(By.TagName("body"));
}
public void Dispose() => Assert.True(this.bodyElement.Enabled);
}
Я видел такой подход в некоторых программных проектах, которые предоставляют API - например, создание контекста, который может сделать операцию без подписи в качестве администратора, пока она не будет уничтожена.
Пример использования:
// This block asserts that no reload occurred after executing operation inside
// Else it throws an exception - which is OK for me.
using (new NoReloadVerificationContext(driver))
{
// this will submit the form and cause page reload because of missing client vlidations
driver.FindElementByCssSelector("form input[type=submit]").Click();
} // The exception will occur here.
Я не знаю, является ли это лучшим решением, но оно будет работать в большинстве случаев (не только в формах)
Другой подход состоял в том, чтобы получить значение __RequestVerificationToken
внутри моей формы (MVC генерирует его в конце каждой формы), затем выполнить некоторые действия, после этого получить значение снова и сравнить со старым. Но это будет работать только для представления формы.