2015-01-22 2 views
3

Я слежу за шаблоном проектирования объектов страницы для автоматизации Selenium, и я могу догадаться, что многие люди хранят локаторы в файле .properties и получают к ним доступ в коде. Кажется здоровым держать локаторы в отдельном месте.Лучший способ хранения локаторов

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

  1. ли хранить локаторы в файл свойств полезен в больших проектах (где тестовые примеры более 1000 или около того)?

    a) Если это не помогает в больших проектах, каковы трудности, которые заставляют нас не хранить локаторы в файле свойств?

    b) Если это полезно, какие меры предосторожности, если они приняты, облегчают работу?

  2. Является ли хранение локаторов в классе страниц самым лучшим способом по сравнению с файлом свойств?

ответ

7

Я бы поспорил, храня файлы в самом классе страницы. Загрузка из файла свойств приведет к дополнительным накладным расходам или синтаксическому анализу большого файла. Поддержание такого файла также было бы более сложным, даже при хорошей поддержке инструмента вы были бы вынуждены использовать CTRL + F больше, чем следовало бы.

Даже на более понятном уровне он чувствует себя не так. Хорошая подгонка для хранения в файлах свойств - это настраиваемые параметры, и особенно те, которые являются хорошими кандидатами для настройки во время выполнения.

Локаторы не имеют такой природы. Если преимущество, которое вы ищете, объявляет в центральном месте, вы должны использовать выделенный постоянный класс, который даст вам гораздо лучшие варианты рефакторинга.

+0

Спасибо Master Slave !!! Я чувствовал то же самое, но ваш ответ помог мне больше. – TDHM

3

Я определенно соглашусь с @Master Slave. Основная цель selenium - сделать тестирование UI проще. Хранение locators в property файл громоздкий и дополнительные накладные расходы плюс кошмар для рефакторинга. Основная причина PageObject тополь, потому что это возможность отображать элементы с очень интуитивным способом

@FindBy(name="q") 
private WebElement searchField; 

@FindBy(name="btnG") 
private WebElement searchButton; 

Это просто не более читаемым гораздо легче в случае рефакторинга и отладки. И, когда что-то пойдет не так на странице или изменениях, есть KNOWN место, куда вы идете, чтобы изменить, и вы знаете, где это!

1

Есть два основных способа:

1) Использование FindBy аннотацию

@FindBy(xpath = "//*[@class = 'stackoverflow']") 
private WebElement question; 

2) Использование By/класса WebElement в структуре метода

By stackoverflow = By.xpath("//*[@class = 'stackoverflow']"); 
WebElement stackoverflowElement = getDriver().findElement(stackoverflow); 

И я полностью согласен с @ Saifur и @MasterSlave.

0

Я согласен с небольшими проектами с одной рабочей средой. Предположим, что проект работает в двух средах, таких как Test and Production. Предположим, что в тесте локаторы изменены, а если вы хотите изменить код, который будет работать правильно в обоих случаях, вы должны перейти в ветвь.В случае, если локаторы, помещенные в файл свойств, вы просто изменяете, файл принадлежит среде.

Смежные вопросы