2016-03-14 5 views
0

Я просмотрел множество блогов и сайтов, чтобы получить дополнительную информацию о POM (Object Object Model). Тем не менее, некоторые из блогов дает примеры использования @FindBy с PageFactory для получения веб-элемента и некоторые из блогов создать метод с написанной WebElement и найти элемент, используя findElement() методы, как указано ниже:Selenium WebDriver @FindBy и findElement() разница

1. @FindBy(id="clickhere") 
    WebElement linkClickHere; 

    public classconstructor(WebDriver driver){ 
     return PageFactory.initElements(driver, classname.class); 
    } 

2. public static WebElement lnk_MyAccount(WebDriver driver){ 
     return driver.findElement(By.id("clickhere")); 
    } 

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

Теперь, какой из них мы должны использовать? Что из этого лучше? Есть ли разница между этими двумя? Каковы преимущества и недостатки этих двух?

Я был бы признателен за ваш вклад ....

+0

Посмотрите ниже темы: 1. http://stackoverflow.com/questions/17819905/selenium-difference-between-findby-and-webelement-findelement 2. http://stackoverflow.com/questions/ 21723730/when-do-findby-attributes-trigger-a-driver-findelement 3. http://stackoverflow.com/questions/17819905/selenium-difference-between-findby-and-webelement-findelement –

ответ

2

PageFactory является чистое решение кодирования обеспечивается Селен для поддержки модели Page Object. И нет, он не получает все веб-элементы перед исполнением, поскольку он предоставляет только прозрачные прокси, а не конкретные экземпляры веб-элементов. Таким образом, вы получите новую копию фактического экземпляра, когда вы сначала делаете что-то с элементом, а не раньше. Поэтому в этом отношении у PageFactory нет недостатка.

Единственным недостатком PageFactory по сравнению с findElement() является то, что вы не можете получить веб-драйвера через свойство веб-элемента WrappedDriver, поэтому вам необходимо самостоятельно отслеживать экземпляр драйвера. Но помимо этого, PageFactory - это аккуратный, чистый способ реализации ПОМ и должен использоваться по возможности.

+0

- лучший подход если я создаю POM, используя 2 варианта? Дело в том, что я передаю значение локатора в переменной, а для FindBy требуется постоянная переменная, которая не может быть инициализирована в конструкторе класса, поскольку у него есть статическое ключевое слово ... У меня есть значение локатора, хранящегося на листе excel, поэтому я обновляю изменение в листе excel и скрипте прочитайте его с листа excel, чем его начало. – Learner

+0

Если вы сохраняете свои локаторы в листе Excel, то это, конечно, совершенно другой подход, чем PageFactory, где локаторы находятся в операторе 'FindBy', который снова требует постоянного значения. Таким образом, ваш подход абсолютно хорошо, но не идет вместе с PageFactory. –

+0

Может быть, еще одна мысль о философии: POM означает для меня, что все связанные с страницей вещи попадают в одно место, которое является файлом класса на странице. Сохраняя локаторы в листе Excel, вы как-то нарушаете эту парадигму. Я не хочу говорить, что это плохо. Это просто профессиональный программист, который должен учитывать и знать. –

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