Frage

Ich habe ein Problem bei der Parametrierung einer Suchfunktion. Tatsächlich muss ich meinen Test mit verschiedenen Schlüsselwörtern füttern:

Hier ist meine Klasse:

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();
}

  }

Was ich gerne tun würde ist:

Zuerst parametrisieren Sie die Suchfunktion, ich denke, ich muss sie auf der SendKeys -Ebene in der Suchfunktion tun, aber ich bin mir nicht sicher, wie es mit TestNG geht.

Zweitens möchte ich, dass Alsi die Apiurl parametriiert.

Vielen Dank im Voraus für Ihre Vorschläge.

Ich habe Folgendes gemacht:

@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();



}

Dann änderte 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>

Wenn ich jedoch nur den letzten Parameter betreibe, wird berücksichtigt: Integration ZCRMI120 01

Danke Zied

War es hilfreich?

Lösung

Der Grund, warum nur der letzte Wert kommt, ist, dass alle Ihre Parameter den Namen als Schlüsselwort haben. Der letzte Parameterwert ist also der letzte, der für das Parameter "Schlüsselwort" aktualisiert wird. Wenn Sie alle Ihre Parameter verwenden möchten, müssen Sie sie anders definieren. Wenn Sie in Ihrem Fall versuchen, denselben Test mit unterschiedlichen Daten auszuführen, sollten Sie den DataProvider verwenden. Ihr Apiurl ist ein guter Kandidat für einen Parameter in der testng.xml coz, was über mehrere Tests konstant wäre.

Andere Tipps

TestNG -Parameter werden durch die Annotation gesteuert, die Sie an die Methoden anhängen können.

Test.java

@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>

Um es sauberer zu machen, können Sie in einer separaten Klasse einen @Dataprovider in einer separaten Klasse von Ihrem Test verwenden, um dann als Parameter zu bestehen.

Myparameters.java

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

Verwenden Sie dann den Dataprovider in Ihrem Test:

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

Auf diese Weise können Sie Ihre Daten und Ihren Test getrennt halten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top