Как я могу параметризировать свои поисковые тесты, используя testng и selenium

StackOverflow https://stackoverflow.com/questions/19838968

Вопрос

Я сталкиваюсь с проблемой по параметрированию функции поиска, на самом деле мне нужно подавать свой тест с разными ключевыми словами:

Вот мой класс:

package Distributed;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import org.json.JSONException;
import org.openqa.selenium.By;
import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class TSKZ63700J {

WebDriver driver ;
String BaseURL , winURL , TestURL, androidURL ;
  String ApiURL = "http://frstmwarwebsrv.orsyptst.com:9000/duobject?     searchString=TSK(Z63700J)(000)(Z63700JU10)(000)&filtercheck=nameSWF&p.index=0&p.size=8";
jsonobject json;

String res;

/**
 * Initiate connection
 */
@BeforeTest


public void setup () throws MalformedURLException  

{
    TestURL = "http://frstmwarwebsrv.orsyptst.com:9000";
    BaseURL = "http://10.2.128.126";
    winURL = "http://10.2.128.120:5556/wd/hub";
    androidURL ="http://10.2.128.120:5555/wd/hub";

    DesiredCapabilities wincap = DesiredCapabilities.firefox();
    wincap.setBrowserName("firefox");
    wincap.setPlatform(Platform.WINDOWS);
    driver = new RemoteWebDriver ( new URL ( winURL ),  wincap) ;



}

@Test
  public void compareresults () throws IOException, JSONException {
            srch ("TSK(Z63700J)(000)(Z63700JU10)(000)");
            //assertEquals(jsonobject.getresults(ApiURL), "TSK(ZRM760J)(000)(ZRM760JU00)(000)");
            assertEquals(jsonobject.getresults(ApiURL), res);

  }

private void srch(String keyword)  {

    driver.get(TestURL);
      WebElement input1 = driver.findElement(By.xpath("html/body/div[1]/div/div[2]/div/form/input[1]"));
      input1.sendKeys("guest");
      WebElement input2 = driver.findElement(By.xpath("html/body/div[1]/div/div[2]/div/form/input[2]"));
      input2.sendKeys("guest");
      WebElement btn = driver.findElement(By.xpath("html/body/div[1]/div/div[2]/div/form/button"));
      btn.click();
      WebElement w1 = driver.findElement(By.xpath("html/body/header/nav/div[1]/form/div/input"));
      w1.sendKeys( "TSK(Z63700J)(000)(Z63700JU10)(000)");
      WebElement w2 = driver.findElement(By.xpath("(//button[@type='button'])[2]"));
      w2.click();
      WebDriverWait wait= new WebDriverWait(driver,10 );
      wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("TSK(Z63700J)(000)(Z63700JU10)(000)")));
      WebElement result = driver.findElement(By.linkText("TSK(Z63700J)(000)(Z63700JU10)(000)"));
     // res = (result.toString()).substring(80,100);
      res =result.getText();



}

private void quitTest() {
    driver.quit();
}

  @AfterTest
public void aftertest ()

{
    quitTest();
}

  }

Я хотел бы сделать:

Сначала параметризуйте функцию поиска, я думаю, я должен сделать это на уровне SendKeys внутри функции поиска, но я не уверен, как это сделать, используя TestNG.

Во -вторых, я хотел бы, чтобы ALSI параметризовал Apiurl.

Заранее спасибо за ваши предложения.

Я сделал следующее:

@Parameters({"keyword" , })
@Test
private void srch(String keyword )  {

    driver.get(TestURL);
      WebElement input1 =   driver.findElement(By.xpath("html/body/div[1]/div/div[2]/div/form/input[1]"));
      input1.sendKeys("guest");
      WebElement input2 = driver.findElement(By.xpath("html/body/div[1]/div/div[2]/div/form/input[2]"));
      input2.sendKeys("guest");
      WebElement btn = driver.findElement(By.xpath("html/body/div[1]/div/div[2]/div/form/button"));
      btn.click();
      WebElement w1 = driver.findElement(By.xpath("html/body/header/nav/div[1]/form/div/input"));
      w1.sendKeys(keyword);
      WebElement w2 = driver.findElement(By.xpath("(//button[@type='button'])[2]"));
      w2.click();



}

Затем изменил testng.xml:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<test name="Search">
    <parameter name="keyword" value="tsk" />
    <parameter name="keyword" value="40" />
    <parameter name="keyword" value="30" />
    <parameter name="keyword" value="A" />
    <parameter name="keyword" value="TSK(SAW" />
    <parameter name="keyword" value="TSK(TTA010ON3" />
    <parameter name="keyword" value="TSK(ARS090J)(000)(ARS090JN30)(000)" />
    <parameter name="keyword" value="TSK(Z63700J)(000)(Z63700JU10)(000)" />
    <parameter name="keyword" value="BAQ703J" />
    <parameter name="keyword" value="BAQ703" />
    <parameter name="keyword" value="CPE800J" />
    <parameter name="keyword" value="NOT700J" />
    <parameter name="keyword" value="ZWE010JU" />
    <parameter name="keyword" value="ANF010JU0" />
    <parameter name="keyword" value="TTA010ON3" />
    <parameter name="keyword" value="BEN700JU40" />
    <parameter name="keyword" value="NOT700JNA5" />
    <parameter name="keyword" value="31" />
    <parameter name="keyword" value="LBEN00733_GLOBAL" />
    <parameter name="keyword" value="LBEN00733" />
    <parameter name="keyword" value="TSK(ZTA010OU05)(000)" />
    <parameter name="keyword" value="CRM :" />
    <parameter name="keyword" value="TSK(CRM025JU50)(000)" />
    <parameter name="keyword" value="TSK(ARS090J)(000)(ARS090JN30)(000)" />
    <parameter name="keyword" value="TSK(Z63700J)(000)(Z63700JU10)(000)" />
    <parameter name="keyword" value="AFF720J" />
    <parameter name="keyword" value="SSCC depuis Gold" />
    <parameter name="keyword" value="CPE170JR10" />
    <parameter name="keyword" value="Uproc Dist: Detection R:\\sysapp\\data\\CPE\\CPE\\wrk\\SSCC_FPLP" />
    <parameter name="keyword" value="Trailer: contournement sur le pb de la TVA" />
    <parameter name="keyword" value="AA" />
    <parameter name="keyword" value="49" />
    <parameter name="keyword" value="Internal Activities" />
    <parameter name="keyword" value="().-_ @[]" />
    <parameter name="keyword" value="Integration ZCRMI120 01" />

    <classes>
        <class name="Distributed.Search" />
    </classes>
</test>







</suite>

Однако, когда я запускаю только последний параметр, принимается во внимание: интеграция ZCRMI120 01

Спасибо, Зид

Это было полезно?

Решение

Причина, по которой идет только последнее значение, заключается в том, что все ваши параметры имеют имя как ключевое слово. Таким образом, последнее значение параметра является последним, которое обновляется для параметра «Ключевое слово». Если вы хотите использовать все свои параметры, вам нужно определить их по -разному. В вашем случае, если вы пытаетесь запустить один и тот же тест с разными данными, вам следует использовать DataProvider. Ваш Apiurl является хорошим кандидатом на параметр в testng.xml, это то, что будет постоянным для нескольких тестов.

Другие советы

Параметры testng контролируются аннотацией, которую вы можете прикрепить к методам.

Тест. Ява

@Parameters({"test", "test1"})
public void myTest(String test, String test1) {
  driver.findElement(By.id("txtSearch")).sendKeys(test);
}

Suite.xml

<test name="My Test">
  <classes>
    <parameter name="test" value="searchTerm" />
    <parameter name="test1" value="some other value" />
    <class name="com.my.package.Test" />
  </classes>
</test>

Чтобы сделать его более чистым, вы можете использовать @dataprovider в отдельном классе от вашего теста, чтобы затем пройти в виде параметров.

MyParameters.java

@DataProvider(name = "keywords")
    public static Object[][] ngKeywords() {
    return new Object[][] { { "tsk" }, { "40" }, { "30" }, { "etc" } };
}

Затем используйте DataProvider в вашем тесте:

@Test(dataProviderClass = MyParameters.class, dataProvider = "keywords")
private void srch(String keyword) {
    someTestStuff();
}

Это позволяет вам разделить ваши данные и тест.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top