Как выполнить параметризацию в Selenium 2 (WebDriver)? Я использую Eclipse с плагинами maven, и у меня нет опыта работы с Selenium Webdriver. Когда я гуглю, все показывает о testNG и JUnit. Есть ли какой-нибудь метод, с помощью которого мы можем параметризовать Webdriver?
Как выполнить параметризацию в Selenium Webdriver?
Ответы (6)
Я собираюсь сделать предположение - вы хотели бы передать какой-то параметр в Webdriver. Это можно сделать двумя способами:
Создайте класс, который расширяет Webdriver, и сделайте так, чтобы его конструктор имел параметр, который вам нужно передать. Однако это сложный способ, потому что вам нужно реализовать/переопределить все (необходимые) функции из веб-драйвера:
public class MyWebdriver extends Webdriver{ private String theParameter; public MyWebdriver(String parameter){ //... initialize the Webdriver //store the parameter theParameter = parameter }
Создайте свою собственную оболочку, которая будет содержать экземпляр из 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
}
}
Мое предложение состояло бы в том, чтобы попытаться использовать среду тестирования (TestNG или Junit), которая дает гораздо больше возможностей, чем просто параметризация. Вероятно, небольшие усилия по настройке фреймворка в начале сэкономят много усилий, когда ваш тестовый код будет расти.
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(); в основном классе. и выполнить
@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
Здесь я предоставляю тестовый пример, который может быть полезен
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;
}}