2010-01-05 2 views
1

Я использую Selenium, чтобы облегчить нагрузку на тестирование, и у меня есть около 1000 различных комбинаций выпадающих списков (разбросанных по нескольким страницам и выпадающим спискам), которые необходимо протестировать. В основном, я хотел бы выбрать каждый вариант < > внутри < выберите >, нажмите кнопку «Отправить», выберите элемент (первый, второй, третий и т. Д.) В выпадающем списке на результирующей странице, нажмите отправьте, а затем вернитесь назад и последовательно выберите следующий элемент. Каждый раз он должен утверждать, что на последней странице присутствует определенное значение (связанное с выпадающим списком). Кто-нибудь знает, возможна ли такая логика в Селене?Selenium: Loop Through Each <option> в раскрывающемся списке

Я с трудом объясняя это, так что надеюсь, это псевдо-код очищает вещи

foreach option in select 
    select option 
    submit form 

    foreach option in select 
    select option 
    submit form 

     assert that page contains text that matches selected values

Edit: Я выбрал значение из выпадающего списка, когда рекордер играет, но похоже, что рекордер не выбирает выбранные значения выпадающего списка. Мне также не удалось выяснить, как выполнить операцию для каждого варианта < > в <. Выберите >.

Первый вопрос, который у меня есть, является ли это возможным. Если да, может кто-нибудь, пожалуйста, указать мне в правильном направлении, чтобы начать меня?

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

ответ

3

На каких языках используется Selenium? Если вы просто используете Selenium, написав HTML, я бы рекомендовал переключиться на язык программирования и использовать Selenium RC - привязки доступны для самых разных языков, таких как Java и Python. В Java, я считаю, что следующий будет делать то, что вы хотите:

void test(Selenium browser, String startPageUrl, 
      String firstFormLocator, String firstSelectLocator, 
      String secondFormLocator, String secondSelectLocator) { 
    browser.open(startPageUrl); 
    for (String option : browser.getSelectOptions(firstSelectLocator)) { 
     browser.open(startPageUrl); 
     browser.select(firstSelectLocator, "label=" + option); 
     browser.submit(firstFormLocator); // Or click the submit button 
     for (String subOption : browser.getSelectOptions(secondSelectLocator) { 
      browser.open(startPageUrl); 
      browser.select(firstSelectLocator, "label=" + option); 
      browser.submit(firstFormLocator); // Or click the submit button 
      browser.select(secondSelectLocator, "label=" + subOption); 
      browser.submit(secondFormLocator); // Or click the submit button 
      // Do your assertions 
     } 
    } 
} 

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

Также имейте в виду, что это 1000 раз не будет быстрым. Возможно, стоит посмотреть, если вы выполните аналогичное тестирование чуть ниже веб-интерфейса, чтобы обеспечить более быструю обратную связь от тестов, а затем проверить, что веб-интерфейс правильно использует нижний слой. Кроме того, вам действительно нужно 1000 тестов? Похоже, что в тестировании есть избыточность - пройдет ли 1000-й тест, если последние 999 пройдут?

+0

Вы также можете использовать функцию 'index =', если вы не хотите использовать foreach, например. for (int i = 0; i AutomatedTester