Как выполнить параметризацию в Selenium Webdriver?

Как выполнить параметризацию в Selenium 2 (WebDriver)? Я использую Eclipse с плагинами maven, и у меня нет опыта работы с Selenium Webdriver. Когда я гуглю, все показывает о testNG и JUnit. Есть ли какой-нибудь метод, с помощью которого мы можем параметризовать Webdriver?


person Tufan    schedule 01.05.2012    source источник


Ответы (6)


Я собираюсь сделать предположение - вы хотели бы передать какой-то параметр в Webdriver. Это можно сделать двумя способами:

  1. Создайте класс, который расширяет Webdriver, и сделайте так, чтобы его конструктор имел параметр, который вам нужно передать. Однако это сложный способ, потому что вам нужно реализовать/переопределить все (необходимые) функции из веб-драйвера:

    public class MyWebdriver extends Webdriver{
          private String theParameter;
    
         public MyWebdriver(String parameter){
           //... initialize the Webdriver
    
           //store the parameter
           theParameter = parameter
    }
    
  2. Создайте свою собственную оболочку, которая будет содержать экземпляр из WebDriver. Это легко (-ier). Например: в моих собственных тестах мне нужно сообщить Webdriver, какую среду я тестирую. Поэтому я создал свой собственный класс для среды:

    public class Environment{
      private String baseUrl;
      public enum NameOfEnvironment {DEV, ACC}
      private NameOfEnvironment environment;
    
      public Environment(NameOfEnvironment envName){
         environment = envName;
      }
    
      public String getBaseUrl(){
          switch (environment){
             case DEV: baseUrl = "https://10.10.11.12:9080/test/";
                       break;
             case ACC: baseUrl = "https://acceptance.our-official-site.com";
                       break;
          }
        return baseUrl;
      }
     }
    

а затем у меня есть собственная оболочка WebDriver, где я инициализирую ее следующим образом:

public class TestUI{
      private Webdriver driver;
      private Environment env;

   public TestUI(Environment e){
       this.env = e;
       driver = new FirefoxDriver;
       driver.get(env.getBaseUrl());
   }
}

И в тесте:

 public class TestCases{

   public static final Environment USED_ENVIRONMENT = new Environment(Environment.NameOfEnvironment.ACC);

 @Test
 public void testSomething(){
    testUI test = new testUI(USED_ENVIRONMENT);
    //.. further steps
 }
 }
person Pavel Janicek    schedule 01.05.2012

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

person niharika_neo    schedule 02.05.2012

public void property(){
    try {

        File file = new File("login.properties");
        FileInputStream fileInput = new FileInputStream(file);
        Properties properties = new Properties();
        properties.load(fileInput);
        fileInput.close();

        Enumeration enuKeys = properties.keys();
        while (enuKeys.hasMoreElements()) {
            String key = (String) enuKeys.nextElement();
            String value = properties.getProperty(key);
            driver.findElement(By.id(key)).sendKeys(value);
            System.out.println(key + ": " + value);
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

и для передачи значений из файла свойств используйте property(); в основном классе. и выполнить

person shashank    schedule 31.05.2012

@Parameters({ "first-name" })
@Test
public void testSingleString(String firstName) {
  System.out.println("Invoked testString " + firstName);
  assert "Cedric".equals(firstName);
}

В этом коде мы указываем, что параметр firstName вашего метода Java должен получить значение параметра XML с именем first-name. Этот параметр XML определен в testng.xml: ‹-- ... -->

Дополнительные сведения см. по следующему адресу: http://testng.org/doc/documentation-main.html#parameters

person Ripon Al Wasim    schedule 07.08.2012
comment
Вы можете использовать JUnit или TestNG в качестве тестовой среды. Что вы хотите использовать? Я предпочитаю TestNG. Если вы используете TestNG, вам нужно создать файл XML, например. testng.xml, где вы можете указать данные для параметризации, используя аннотацию @Parameters TestNG (которая была упомянута в приведенном выше фрагменте кода - person Ripon Al Wasim; 07.09.2012

Здесь я предоставляю тестовый пример, который может быть полезен

 package pac1;
 import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.Wait;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
  import javax.xml.parsers.DocumentBuilderFactory;
 import org.w3c.dom.*;

public class test extends sut  {
static WebDriver driver;
static Wait<WebDriver> wait;
  public static boolean run(WebDriver driverArg, Wait<WebDriver> waitArg)
{
    driver = driverArg;
    wait = waitArg;
   // Run all the methods and return false if any fails
    return (test1() );
                  } 
   private static boolean test1()
   {



  driver.get("https://accounts.google.com");

    try {
        File file = new File("emaildata.xml"); //file location should be specified correctly put your xml in the same folder of the source code.
        // Prepare XML
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document document = db.parse(file);
        document.getDocumentElement().normalize();
        NodeList emailNodeElementList = document.getElementsByTagName("test");//test is the name of the child tag 
        for(int j=0;j<emailNodeElementList.getLength(); j++)//loop for the multiple data
    {
       String client = "The username or password you entered is incorrect. ?";
        Element emailNodeElement = (Element)emailNodeElementList.item(j);
        NodeList details = emailNodeElement.getChildNodes();
        String emailAddress=((Node) details.item(0)).getNodeValue();
        System.out.println("email :" + emailAddress);//it just prints which email is going to be parsed
        WebElement element = driver.findElement(By.cssSelector("body"));
            boolean feedBack = driver.findElement(By.cssSelector("body")).getText().contains(client);
            boolean feedbackVisible = element.isDisplayed();


    WebElement e1 = driver.findElement(By.id("Email"));//getting the location from the web
    e1.sendKeys(emailAddress);//sending keys to the server
    WebElement e3 = driver.findElement(By.id("signIn"));
    e3.click();


    if(feedBack==true){
        System.out.println(client+ "is present");
        if(feedbackVisible==true){
            System.out.println(client+ "is visible");
        }
        else{
            System.out.println(client+ "is not visible");
        }

    }
    else{
        System.out.println(client+ "is not present");

    }
    }
  }
 catch (Exception e) {e.printStackTrace();}

  return true;
  }}
person B-Gun    schedule 08.01.2014

person    schedule
comment
Строка Имя пользователя = read.readData(Лист1, 1, 2); driver.findElement (By.id (ap_email)). sendKeys (имя пользователя); driver.findElement(By.id(продолжить)).click(); Строковый пароль = read.readData(Лист1, 1, 3); driver.findElement(By.id(ap_password)).sendKeys(Password); - person guest; 01.05.2019
comment
Спасибо за вклад в SO. Пожалуйста, найдите время и посетите Справку по ответу SO. Вы должны объяснить, почему вы считаете, что это правильный ответ - person Chirag Jain; 01.05.2019