Как хранить и перечислять переменные в коде Selenium? - PullRequest
0 голосов
/ 11 июня 2019

Я создал свои тесты на селен, однако я хотел бы начать очищать их для удобства чтения и повторного использования.Что вы делаете со своими переменными?

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

        [Test]
        public static void TestAccrualRuleSet()
        {
            //Setup buttons and variables
            IWebDriver driver = new ChromeDriver();
            var hamburgerMenu = By.XPath("//*[@id='menu-toggle']/span/i");
            var settingsMenuButton = By.XPath("//*[@id='ulAdminNavBar']/li[4]/a");
            var timeAndLaborMgmtButton = By.XPath("//*[@id='ulAdminNavBar']/li[4]/ul/li[11]/a");
            var timeOffTrackingButton = By.XPath("//*[@id='ulAdminNavBar']/li[4]/ul/li[11]/ul/li[2]/a");
            var actionMenu = By.Id("ucAccrualRules_ddlAccrual");
            var ruleNameTextBox = By.Id("ucAccrualRules_ucAccrualRule_txtRuleName");
            var accrualRuleFrequencyDropDown = By.Id("ucAccrualRules_ucAccrualRule_cboAccrualType");
            var dropDownAccrualTypes = By.Id("ucAccrualRules_ucAccrualRule_hourTypes");
            var dropDownAccrualTypesCheckBox1 = By.Id("ucAccrualRules_ucAccrualRule_hourTypes_0");
            var dropDownAccrualTypesCheckBox2 = By.Id("ctl00_ContentPlaceHolder1_ucAccrualRules_ucAccrualRule_hourTypes_1");
            var dropDownAccrualTypesCheckBox3 = By.Id("ctl00_ContentPlaceHolder1_ucAccrualRules_ucAccrualRule_hourTypes_6");
            var maxCarryForwardTextBox = By.Id("ctl00_ContentPlaceHolder1_ucAccrualRules_ucAccrualRule_txtMaxRollover");
            var accrualWaitingTextBox = By.Id("ctl00_ContentPlaceHolder1_ucAccrualRules_ucAccrualRule_txtAccrualWaitingPeriod");
            var saveButton = By.XPath("//*[@id='ctl00_ContentPlaceHolder1_ucAccrualRules_ucAccrualRule_cmdUpdateName']");
            var savedSuccessfully = By.Id("ctl00_ContentPlaceHolder1_ucAccrualRules_ucAccrualRule_UCErrorRuleProperties_lblMessage");
            var propertiesButton = By.Id("ctl00_ContentPlaceHolder1_ucAccrualRules_ucAccrualRule_tpAccuralRulePropertiesnewForms");
            IJavaScriptExecutor js = (IJavaScriptExecutor)driver;

            //Begin test
            AppExtensions.LoginUsingChrome(driver);
            AppExtensions.SelectCompany(driver, "Ren's Test Account");
            System.Threading.Thread.Sleep(1500);
            WebDriverExtensions.Element_Click(driver, hamburgerMenu);
            System.Threading.Thread.Sleep(1500);

Хотя это и не весь тест, он показывает вам пример моего огромного списка переменных, которые я использую для хранения кнопок / ссылок, необходимых для выполнения моего теста.Какова наилучшая практика относительно того, как и где хранятся эти переменные для тестов Selenium?

Ответы [ 3 ]

1 голос
/ 12 июня 2019

Обычно люди идут на 2 модели:

  1. Репозиторий объектов - для хранения данных элементов во внешнем источнике. В качестве альтернативы вы можете выбрать SpecFlow и сохранить локаторы элементов в файлах Gherkin .
  2. Объектная модель страницы - уровень абстракции для пользовательского интерфейса, основная идея состоит в том, чтобы отделить тестовую логику от представления пользовательского интерфейса, чтобы при изменении пользовательского интерфейса тестовый код оставался прежним
1 голос
/ 11 июня 2019

Рекомендуется группировать переменные в классах. Вы должны иметь один класс на страницу и переместить все переменные для веб-элементов этой страницы в соответствующий класс. Это называется POM или Page Object Model. Вы можете пойти дальше и добавить методы к тем классам, которые охватывают несколько действий для этой конкретной страницы или даже переход на другие страницы. Подсказка: методы навигации будут перемещаться и ждать загрузки следующей страницы и возвращать экземпляр класса POM этой целевой страницы.

0 голосов
/ 11 июня 2019

Один из подходов заключается в том, что вы можете создать файл свойств и поддерживать все ваши xpath и т. Д. В этом. Затем просто обратитесь к файлу свойств в вашем классе, чтобы получить доступ к varaible, используя xpath или локаторы. Таким образом, если любой из xpath изменяется, у вас есть только один файл для обновления, это файл свойств. Пример:

    Inside home.properties file you can have xpath as

searchBtn = //input[@elementid = 'abc']

this.properties = new Properties();
InputStream input = new FileInputStream("home.properties");
this.properties.load(input);
//Inside your class file you can access xpath as
    String searchBtn = By.xpath(properties.get("searchButton"))

Я не могу придумать другой подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...