Как применить ожидание элемента с помощью WinAppDriver на UWP в C# - PullRequest
0 голосов
/ 15 января 2020

Я работаю над автоматизацией приложения UWP с использованием WinAppDriver с C#, но в некоторых моментах мои тесты не выполняются, так как для отображения некоторых элементов требуется время, и я не могу применить waitDriverWait (думаю, в WAD этого нет), поэтому я нашел ниже код, который работает, но хотел бы знать, есть ли лучший подход, пожалуйста?

 public static void WaitForElement(this WindowsDriver<WindowsElement> driver, string IDType, string elementName, int time = 10000)
    {
        var wait = new DefaultWait<WindowsDriver<WindowsElement>>(BasePage.WindowsDriver)
        {
            Timeout = TimeSpan.FromSeconds(time),
            PollingInterval = TimeSpan.FromSeconds(0.5)
        };

        wait.IgnoreExceptionTypes(typeof(InvalidOperationException));

        wait.Until(driver1 =>
        {
            int elementCount = 0;
            switch (IDType)
            {
                case "id":
                    elementCount = driver1.FindElementsByAccessibilityId(elementName).Count;
                    break;
                case "xpath":
                    elementCount = driver1.FindElementsByXPath(elementName).Count;
                    break;
                case "name":
                    elementCount = driver1.FindElementsByName(elementName).Count;
                    break;
            }
            return elementCount > 0;
        });
    }

1 Ответ

0 голосов
/ 15 января 2020

В прошлом я успешно использовал WebDriverWait с моей автоматизацией WinAppDriver - вам придется установить DotNetSeleniumExtras.WaitHelpers для доступа к классу ExpectedConditions, так как он теперь устарел в стандартном пространстве имен Selenium, но я не ничего не мешает вам использовать WebDriverWait.

Ожидание заполнения элемента Text значением:

var Driver = new WindowsDriver<WindowsElement>();
var myElement = Driver.FindElementByAccessibilityId("someId");

var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(30));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.TextToBePresentInElement(myElement, "text"));

Ожидание отображения элемента:

var Driver = new WindowsDriver<WindowsElement>();
var myElement = Driver.FindElementByAccessibilityId("someId");

new WebDriverWait(driver, TimeSpan.FromSeconds(30)).Until(d => myElement.Displayed);

Ожидание существования элемента, используя другой подход с FindElements и By.Name:

var Driver = new WindowsDriver<WindowsElement>();

new WebDriverWait(driver, TimeSpan.FromSeconds(30)).Until(d => d.FindElements(By.Name("someName")).Count > 0);

Как уже упоминалось, я использовал эти точные методы для ожидания в прошлом с WinAppDriver, с успехом. Пожалуйста, дайте мне знать, с какими проблемами вы сталкиваетесь с этими подходами.

...