Как правильно инициализировать страницы в .netcore с помощью Selenium? - PullRequest
0 голосов
/ 10 января 2019

Следуя другим примерам, я ранее следовал методу PageFactory.InitElements(driver, page), чтобы инициализировать свои страницы перед вызовом методов для поиска элементов на этих конкретных страницах.

Однако, похоже, что PageFactory теперь устарела .netcore, как указано здесь: https://github.com/SeleniumHQ/selenium/issues/4387

Проблема, с которой я сталкиваюсь, заключается в инициализации моих страниц для инфраструктуры автоматизации для селена без PageFactory.Init, который я использовал / видел в других случаях. Я не могу передать исключение нулевой ссылки для примера кода ниже. Вот что я настроил прямо сейчас:

Использование последних версий .netcore, selenium.chrome.webdriver, selenium.webdriver, поддержка селена и xunit

Пример настройки:

Test.cs

[Fact]

public void CanLogin()

{

    Pages.Login.Login("username", "password");
    Assert.True(true);

}

Pages.cs

// Здесь я хочу инициализировать свой логин и вернуть его, но у меня возникли трудности. Это ПОЛНОСТЬЮ ПСЕВДО ... это именно то место, где я хочу, чтобы это произошло

public LoginPage Login

{

    return Init LoginPage here;

}

LoginPage.cs

private IWebElement userNameTextField;

private IWebElement passwordTextField;

public void Login(string userName, string password)

{

    userNameTextField.SendKeys(userName);
    passwordTextField.SendKeys(password);

}

Как только он нажмет Pages.Login.Login(), он не сможет сказать System.NullReferenceException : Object reference not set to an instance of an object.

Я пробовал много вещей, но не могу найти правильный шаблон, чтобы следовать, чтобы иметь возможность инициировать все необходимые страницы в моих Pages.cs, такие как: LoginPage

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Это было решено с помощью SeleniumExtras.PageObjects

тогда я смог следовать шаблону, найденному из оригинальной публикации выше: PageFactory.InitElements (драйвер, страница)

0 голосов
/ 11 января 2019

Создайте экземпляр класса страницы и передайте его в тесте. Смотрите решение ниже

[TestClass]
public class UnitTest2
{
    [TestMethod]
    public void CanLogin()
    {
        Page LoginPage = PageInitialization.Login;
        LoginPage.Login("username", "password");
    }

    public class PageInitialization
    {
        private Page loginPage;

        public PageInitialization()
        {
            loginPage = new Page();
        }

        public static Page Login
        {
            get { return Instance.loginPage; }
        }

        private static PageInitialization Instance
        {
            get
            {
                return new PageInitialization();
            }
        }
    }


    public class Page
    {
        private IWebElement userNameTextField;

        private IWebElement passwordTextField;

        public void Login(string userName, string password)
        {

            userNameTextField.SendKeys(userName);
            passwordTextField.SendKeys(password);
        }
    }

}
...