2016-01-18 4 views
0

У меня проблема при попытке выполнить параллельные тесты с помощью Selenium webdriver + testNG. Я думаю, что моя проблема связана с XML, однако я не уверен, что это проблема. Ниже приведено сообщение об ошибке, и мой код был неправильным?Параллельное тестирование с помощью XML-теста TestNG + WebDriver?

FAILED CONFIGURATION: @BeforeClass beforeTest 
org.testng.TestNGException: 
Parameter 'browser' is required by @Configuration on method beforeTest but has not been marked @Optional or defined 
in C:\Users\robertr\AppData\Local\Temp\testng-eclipse--933208925\testng-customsuite.xml 

SKIPPED CONFIGURATION: @AfterMethod afterMethod 
SKIPPED CONFIGURATION: @AfterMethod afterMethod 
SKIPPED CONFIGURATION: @AfterMethod afterMethod 
SKIPPED CONFIGURATION: @AfterMethod afterMethod 
SKIPPED: login("jane[email protected]", "password1", "smith") 
SKIPPED: login("[email protected]", "password1", "smith") 
SKIPPED: login("[email protected]", "password1", "smith") 
SKIPPED: login("[email protected]", "password1", "smith") 

Код проверки:

public class ParallelLogin { 

    private static Logger logger1 = LogManager.getLogger("Logger1"); 

    WebDriver driver; 

    @Parameters({"browser"}) 

    @BeforeClass 
     public void beforeTest(String browser) { 
     // If the browser is Fire fox, then do this 
     DOMConfigurator.configure("log4j.xml"); 

      if(browser.equalsIgnoreCase("firefox")) { 

       driver = new FirefoxDriver(); 

      // If browser is IE, then do this 

      }else if (browser.equalsIgnoreCase("ie")) { 

       // Here I am setting up the path for my IEDriver 

       System.setProperty("webdriver.ie.driver", "http://localhost/2010A15/"); 

       driver = new InternetExplorerDriver(); 

      } 

      driver.get("http://localhost/2010A15/"); 
     } 

    @Test(dataProvider = "Authentication") 
    public void login(String sUsername, String sPassword, String sMemorableWord) throws InterruptedException { 

    //Find Login Element 
     driver.findElement(By.id("WEB_LoginButton")).click(); 

     logger1.info("Login Button Clicked"); 
     //Find User name Element 

     driver.findElement(By.cssSelector("#dijit_form_ValidationTextBox_4")).sendKeys(sUsername); 

     logger1.info("Username Entered"); 

     //Find Password Element 

     driver.findElement(By.cssSelector("#dijit_form_ValidationTextBox_5")).sendKeys(sPassword); 

     logger1.info("Password Entered"); 

     //Find Memorable word Element 

     driver.findElement(By.cssSelector("#dijit_form_ValidationTextBox_6")).sendKeys(sMemorableWord); 

     logger1.info("MemorableWord Entered"); 

     Reporter.log("All Login Details Entered | "); //Main Event 

     WebElement login = driver.findElement(By.id("dijit_form_Button_1_label")); 

     if(login.isDisplayed()){ 
      login.click(); 
      Reporter.log("Submit Button Clicked |"); 
     } 

     // Now check again for the login button. 
     // If login button is displayed it means that the form submission 
     // is not successful and you have returned to the same page. 
     // We are using a try catch block here because if the element is not found 
     // if form submission is successful NoSuchElementException would be thrown. 
     try { 
      // Element has to be found again else StaleElementReferenceException 
      // might be thrown because of page reload. 
      login = driver.findElement(By.id("dijit_form_Button_1_label")); 
      // if login button is found again, this means form submission is not successful 
      Reporter.log("Login Failed | "); 
      logger1.info("Login Failed"); 
     } catch (Exception e) { 
      // Login button is not found. Form is submitted 
      Reporter.log("Login Form Submitted | "); 
      logger1.info("Submit Button Clicked and successfully logged in |"); 
     } 
      //Main Event is logged If Passed 


      //Main Event Log Fail 

     WebElement logout = driver.findElement(By.id("dijit_form_Button_0_label")); 

     if(logout.isDisplayed()){ 
      logout.click(); 
      Reporter.log("Logout Button Clicked |"); 
} 

     try{ 

      logout = driver.findElement(By.id("dijit_form_Button_0_label")); 

      Reporter.log("Logout Failed |"); 


     } catch (Exception e) { 

      Reporter.log("Logout Submitted |"); 
      logger1.info("Logout Submitted |"); 
     } 
    } 



     //Check Reporter Results as these will be correct. Console Results will show if code has been run and passed. 





    @DataProvider(name = "Authentication") 
    public static Object[][] credentials() { 
    return new Object[][] { { "[email protected]", "password1", "smith" }, { "[email protected]", "password1", "smith" }, { "[email protected]", "password1", "smith" }, { "[email protected]", "password1", "smith" }}; 
    }; 






     @AfterMethod 
      public void afterMethod() { 

      driver.close(); 
      } 
    } 

XML код:

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 

<suite name="Suite" parallel="tests"> 

<test name="FirefoxTest"> 

<parameter name="browser" value="firefox" /> 

<classes> 

<class name="utility1.ParallelLogin" /> 

</classes> 

</test> 

<test name="IETest"> 

<parameter name="browser" value="ie" /> 

<classes> 

<class name="utility1.ParallelLogin" /> 

</classes> 

</test> 
+0

Как вы используете его? от затмения? вы указываете правильный xml как testng xml во время работы? – Shamik

+0

Запуск из Ecilpse по щелчку правой кнопкой мыши RUN в качестве теста TestNG. Как проверить, что я задаю правильный xml? – Speedychuck

+0

таким образом он вообще не использует xml. Подождите, я напишу ответ – Shamik

ответ

1

Если вы хотите запустить testng.xml

  1. Перейти к Выполнить конфигурацию
  2. Создать новый testng co nfiguration
  3. кнопку
  4. выберите свита радио и указать файл testng.xml вы хотите использовать

enter image description here

Else, если вы хотите просто запустить определенный класс, то вы можете указать необязательное значение для браузера

@Parameters("browser") 
public void testNonExistentParameter(@Optional("ie") String browser) 

Таким образом, при запуске без xml он будет использовать необязательный параметр.

для более подробной информации перейдите по документации - http://testng.org/doc/documentation-main.html

+0

Я создал новый XML и настроил его через run config, однако, я получаю тот же ответ? – Speedychuck

+0

Вы должны использовать конфигурацию tge во время работы. В противном случае, если вы запустите один класс, добавьте необязательные параметры – Shamik

+0

@Optional («chrome») String browser), однако, если я хочу запустить оба браузера одновременно с тем же тестом, я должен использовать xml? или я могу добавить хром и firefox в @Optional? – Speedychuck

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