У меня есть следующие элементы, идентифицированные в объекте страницы ..
public WindowsElement usernameField => _session.FindElementByAccessibilityId("UserName");
public WindowsElement passwordField => _session.FindElementByAccessibilityId("Password");
public WindowsElement menuButton => _session.FindElementByXPath("//Button[contains(@Name, 'Menu')]");
У меня есть тест со следующими шагами ..
WaitForObject(usernameField)
usernameField.SendKeys("...")
WaitForObject(passwordField)
passwordField.SendKeys("...")
ClickButton("Sign In");
WaitForObject(menuButton);
menuButton.Click();
И ниже, вот мой WaitForObject method ..
// Wait for an Object to be accessible
public void WaitForObject(WindowsElement element)
{
var wait = new DefaultWait<WindowsDriver<WindowsElement>>(_session)
{
Timeout = TimeSpan.FromSeconds(10),
PollingInterval = TimeSpan.FromSeconds(1)
};
wait.IgnoreExceptionTypes(typeof(WebDriverException));
wait.IgnoreExceptionTypes(typeof(InvalidOperationException));
wait.IgnoreExceptionTypes(typeof(StaleElementReferenceException));
wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
wait.IgnoreExceptionTypes(typeof(NotFoundException));
WindowsElement waitElement = null;
wait.Until(driver =>
{
waitElement = element;
return waitElement != null && waitElement.Enabled && waitElement.Displayed;
});
}
Метод WaitForObject отлично работает для проверок usernameField & passwordField, но по какой-то причине он сразу завершается ошибкой при передаче в menuButton. Я знаю, что он правильно проверял usernameField & passwordField, потому что я включил несколько Console.WriteLines () для распечатки всякий раз, когда он обнаружит одно из этих исключений. Как только он попадает в menuButton, ничего не регистрируется, он сразу же завершается с ошибкой WebDriverException
OpenQA.Selenium.WebDriverException: элемент не может быть расположен на странице с использованием заданных параметров поиска.
Почему бы не действовать так же для кнопки меню? Я пробовал другие подходы, используя циклы while, перехватывающие общие исключения, но тем не менее он сразу завершается сбоем, когда попадает в этот элемент с WebDriverException.
Если я использую Thread.Sleep (10000) перед попыткой проверить элемент , он работает нормально и выполняет щелчок ..
Я использую библиотеки WinAppDriver / Appium.