Удаление PageFactory из дизайна C # - PullRequest
0 голосов
/ 21 февраля 2019

У нас есть существующая среда автоматизации пользовательского интерфейса в C #, основанная на знаниях того времени, когда мы использовали PageFactory для инициализации элементов в файлах подкачки.Недавно я прочитал больше на эту тему, и, похоже, нет реальной пользы от использования PageFactory в C #, поэтому я пытаюсь переписать страницы, используя вместо этого поля.Одна вещь, с которой у меня сейчас проблемы, - это заставить работать мои расширенные методы.

Например: в текущей реализации у меня есть элемент, идентифицированный следующим образом: [FindsBy (How = How.LinkText, Using = "Authenticate")] private IWebElement BstHomePageHeader;

    public IWebElement getBstHomePageHeader()
    {
        return BstHomePageHeader;
    }

Существует вспомогательный метод, который проверяет, существует ли элемент в определенных случаях, и он вызывается следующим образом из теста:

home.getBstHomePageHeader (). DoesElementExist (). Should (). BeTrue ("Пользователь не былперенесено на домашнюю страницу. ");

В коде метода" DoesElementExist "применяется 5-секундное ожидание, постоянно проверяющее элемент. Отображаемая проверка и игнорирующая исключения NoSuchElementException, ElementNotVisibleExpection и WebDriverTimeoutException.Если элемент не возвращается в течение 5 секунд, ложному ответу возвращается основной вызов и генерируется сообщение о свободном подтверждении.

Когда я удаляю PageFactory, элемент теперь создается, как показано ниже (в том же файле страницы):public IWebElement getBstHomePageHeader => driver.FindElement (By.LinkText ("Authenticate"));

Если я попытаюсь применить к нему тот же вспомогательный метод, что и в части строки кода DidElementExist, больше не применяется.NoSuchElementException выбрасывается непосредственно в мой файл подкачки, и поэтому свободное сообщение о подтверждении не возвращается.home.getBstHomePageHeader.DoesElementExist (). Should (). BeTrue («Пользователь не был перенесен на домашнюю страницу.»);

Возможно ли в дизайне, отличном от PageFactory, не иметь класса страницы, который выбрасываетNoSuchElementException, чтобы тест мог обработать ошибку?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Ну, для чего я стою, я нашел другое решение.Я не уверен, что это лучший, но я верю, что это сработает.В моем файле подкачки я просматриваю элементы следующим образом: public IWebElement getBstHomePageHeader => LookUpElement(By.LinkText("Authenticate")); Я создал базовый класс, в котором размещен метод LookUpElement и который выглядит как protected IWebElement LookUpElement(By locator) { try { return wait.Until(driver => driver.FindElement(locator)); } catch (NoSuchElementException) { } catch (ElementNotVisibleException) { } catch (WebDriverTimeoutException) { } return null; }

Логика ожидания такая же, как и раньше.Единственное другое изменение - я изменил способ задания вопроса в рамках теста.Теперь это выглядит так: if (home.getBstHomePageHeader == null) false.Should().BeTrue("User was not taken to the home page."); test.Log(Status.Pass, "User is on the home page.");

Итак, я думаю, что я действительно не ответил на свой оригинальный вопрос, но этот обходной путь, кажется, работает.Нам просто нужно переписать то, как мы задаем вопросы.

0 голосов
/ 22 февраля 2019

В Java вы бы бросили исключение до вызывающей стороны.Вы можете сделать это вообще в C #?

Похоже, это может помочь: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/exceptions/creating-and-throwing-exceptions

Примечание: мы также удалили фабричные контейнеры страниц из нашей базы кода, и это стало намного чище,Каждый класс страницы содержит свои собственные обязательные элементы и селекторы в верхней части класса.Мы также заметили исключения устаревших элементов в контейнерах, даже если они были правильно настроены.

...