Методы не начальной функции Spock терпят неудачу при запуске класса в целом

Я использую Геба и Спока вместе, чтобы протестировать интерфейсное приложение. Я новичок в обоих этих инструментах. У меня есть спецификация Spock, которая расширяет GebReportingSpec.

Затем у меня есть setupSpec, который входит в приложение и переходит на определенную страницу. За этим следуют различные методы функций, которые выполняют действия на веб-странице (например, щелчок раскрывающегося списка с последующим выбором параметра).

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

    class VerifyFields extends GebReportingSpec {
        def setupSpec() {
          // Log in
          via Dashboard
          loginForm.login("marco", "abc123")

          // Navigate to Page 1
          button1.click()
          button2.click()

          // Click Button 3
          button3.click()
    }

// This feature method passes successfully
    def "Verify Member fields exist"() {
        when: "User selects Member option for drop down 1"
        at Page1
        projSubject.click()
        projCoverMbrFields.projSubjectMbrOption.click()
        sleep(1500)

        then: "All expected member fields are displayed in the left panel"
        assert mbrName.present
    }

// This feature method fails when run after the first feature method
    def "Verify Provider fields exist"() {
        when: "User selects Provider option for subject type"
        at Page1
        projSubject.click()
        projCoverProvFields.projSubjectProvOption.click()
        sleep(1500)

        then: "All expected provider fields are displayed in the left panel"
        assert provName.present
    }

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

driver.findElement(By.className("projSubject")).click()
driver.findElement(By.cssSelector(".projSubjectoption[value='Provider']")).click()

И измените атрибут на selected = "selected" с помощью следующих строк:

$("select.projSubject option[value='Provider']").jquery.attr("selected", true)
projCoverProvFields.projSubjectProvOption.jquery.attr('selected', 'selected')

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


person Marco S.    schedule 21.09.2017    source источник


Ответы (1)


Ваша ошибка может быть связана с тем, что вы запускаете setupSpec (), который запускается один раз для каждой спецификации (а не один раз для каждого метода). Чтобы поддерживать сеанс для всех методов в спецификации и запускать их по порядку, вам нужно добавить атрибут @Stepwise spock в начало вашего класса.

@Stepwise
class VerifyFields extends GebReportingSpec {
   ...
}

Другой вариант - использовать setup (), а не setupSpec (), вот отличия:

def setup() {}          // run before every feature method
def setupSpec() {}     // run before the first feature method

При использовании setupSpec () он будет запускаться перед первым методом функции, поэтому оба теста могут работать индивидуально. Попробуйте заменить setupSpec () на setup ().

Просто помните, что запуск setup () увеличит общее время выполнения теста, поскольку вы будете повторять его для каждого метода. Если возможно, я бы использовал @Stepwise.

person Rushby    schedule 22.09.2017
comment
Добавление атрибута spock @Stepwise в начало моего класса решило проблему! Большое вам спасибо, я потратил часы, пытаясь решить эту проблему! - person Marco S.; 22.09.2017
comment
Нет проблем - рад, что помог :) - person Rushby; 22.09.2017