TestNG Selenium-integratievoorbeeld
In dit artikel laat ik je een voorbeeld zien van TestNG en Selenium-integratie. Ik wil u eerst informeren over TestNG en Selenium.
TestNG is een op annotaties gebaseerd testraamwerk waarmee u configureerbare testsuites kunt maken waarbij elke suite een of meer tests bevat. Een test bestaat op zijn beurt uit nog een testklasse.
Selenium wordt gebruikt bij het automatiseren van webapplicaties voor testdoeleinden. In tegenstelling tot HtmlUnit gebruikt het een echte browser om zijn tests uit te voeren.
Laten we beginnen met de installatie:
- Aangezien het voorbeeld gaat over de integratie van TestNG en Selenium, vereenvoudigen we onze installatie door Maven als onze build-tool te gebruiken.
- TestNG Maven-projectvoorbeeld helpt u bij het opzetten van een op Maven gebaseerd project en het uitvoeren van de TestNG-tests.
- Onze voorbeelden zijn gebaseerd op Chrome en Firefox, dus zorg ervoor dat beide op uw computer zijn geïnstalleerd.
- De browserstuurprogramma's worden automatisch gedownload als gevolg van de toevoeging van de afhankelijkheden aan het maven-projectbestand
pom.xml
. - In het geval van chrome moeten we ook chromedriver.exe downloaden. Dit fungeert als een brug tussen chroom en de bestuurder.
- Ik heb Eclipse gebruikt als de IDE, versie Luna 4.4.1.
1. Afhankelijkheden van TestNG en selenium
Aangezien ons project afhankelijk is van TestNG en selenium, moeten we hun afhankelijkheden toevoegen in Maven's pom.xml
het dossier. Voor TestNG moeten we org.testng
. toevoegen pakket en voor selenium moeten we org.seleniumhq.selenium
. toevoegen . Eenmaal opgeslagen, zal het de Selenium 2.0 java-clientbibliotheek en al zijn afhankelijkheden downloaden.
pom.xml:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.javacodegeeks.testng.spring</groupId> <artifactId>testNGSpring</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.45.0</version> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.8.8</version> <scope>test</scope> </dependency> </dependencies> <properties> <spring.version>4.1.5.RELEASE</spring.version> </properties> </project>
2. TestNG Selenium Eenvoudig zoekvoorbeeld
Selenium biedt WebDriver
als zijn API voor het automatiseren van het testen van webapplicaties. WebDriver
stuurt de browser rechtstreeks aan met behulp van de ingebouwde ondersteuning voor automatisering van elke browser.
In dit voorbeeld gebruiken we de WebDriver
om google te openen en te zoeken naar TestNG.
WebDriver
is een interface, dus we hebben nog steeds een implementatie nodig om de test in een echte browser uit te voeren. We zullen de implementatie selecteren op basis van de gebruikte browser. Als we bijvoorbeeld Firefox gebruiken, gebruiken we FirefoxDriver
. Als het chrome is, gebruiken we ChromeDriver
. Sinds ChromeDriver
werkt met Chrome via de chromedriver.exe, moeten we ervoor zorgen dat het binaire bestand ergens op het pad van uw systeem wordt geplaatst.
Aandachtspunten met betrekking tot de testklasse:
- In
@BeforeSuite
methode,initDriver()
, we maken de driver. searchTestNGInGoogle()
is onze testmethode.- We bellen
driver.navigate().to(url)
om de url te openen. - Zodra de site open is, moeten we een greep krijgen op het zoekveld, zodat we de tekst kunnen typen die moet worden doorzocht.
- Als we
driver.findElement(By.name("q"))
bellen , deWebDriver
lokaliseert het zoekveld met behulp van overeenkomend naamkenmerk. - Vervolgens noemen we
element.sendKeys("TestNG")
om de tekst "TestNG" in het zoekveld in te voeren. - De zoekopdracht wordt ingediend door
element.submit().
. te bellen - Ten slotte wachten we tot de resultaten worden teruggestuurd.
- In
@AfterSuite
methode,quitDriver()
, we noemendriver.quit()
om de browsersessie te sluiten.
TestNGSeleniumSimpleSearchExample:
package com.javacodegeeks.testng.selenium; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait; import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeSuite; import org.testng.annotations.Test; public class TestNGSeleniumSimpleSearchExample { private WebDriver driver; @BeforeSuite public void initDriver() throws Exception { System.out.println("You are testing in firefox"); driver = new FirefoxDriver(); } @Test public void searchTestNGInGoogle() { final String searchKey = "TestNG"; System.out.println("Search " + searchKey + " in google"); driver.navigate().to("http://www.google.com"); WebElement element = driver.findElement(By.name("q")); System.out.println("Enter " + searchKey); element.sendKeys(searchKey); System.out.println("submit"); element.submit(); (new WebDriverWait(driver, 10)).until(new ExpectedCondition() { public Boolean apply(WebDriver d) { return d.getTitle().toLowerCase() .startsWith(searchKey.toLowerCase()); } }); System.out.println("Got " + searchKey + " results"); } @AfterSuite public void quitDriver() throws Exception { driver.quit(); } }
testngSimpleSearch.xml:
<?xml version="1.0" encoding="UTF-8"?> <suite name="TestNgSeleniumSuite" parallel="false"> <test name="TestNgSeleniumTest"> <classes> <class name="com.javacodegeeks.testng.selenium.TestNGSeleniumSimpleSearchExample" /> </classes> </test> </suite>
Uitvoer:
[TestNG] Running: C:\javacodegeeks_ws\testNGSelenium\src\test\resources\com\javacodegeeks\testng\selenium\testngSimpleSearch.xml You are testing in firefox Search TestNG in google Enter TestNG submit Got TestNG results =============================================== TestNgSeleniumSuite Total tests run: 1, Failures: 0, Skips: 0 ===============================================
3. WebDriver-injectie met veer
In plaats van zelf de WebDriver te maken, kunnen we de implementatie injecteren met behulp van de afhankelijkheidsinjectie van de lente. Hier zullen we ons vorige voorbeeld wijzigen door de lente te gebruiken om de driver te injecteren.
Aangezien we op de lente gaan vertrouwen, moeten we spring-context
. toevoegen en spring-test
naar onze afhankelijkheden in pom.xml
.
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.javacodegeeks.testng.spring</groupId> <artifactId>testNGSpring</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.45.0</version> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.8.8</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> </dependencies> <properties> <spring.version>4.1.5.RELEASE</spring.version> </properties> </project>
Het onderstaande contextbestand bevat de driverbean-definitie. De class
attributen aan org.openqa.selenium.firefox.FirefoxDriver
.
driver_context.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <bean id="driver" class="org.openqa.selenium.firefox.FirefoxDriver" /> </beans>
De onderstaande testklasse doet precies wat de vorige deed, de enige verandering is dat de bestuurder wordt geïnjecteerd via de annotatie van de lente @ContextConfiguration
. De waarde bevat het locatiepad naar het contextbestand driver_context.xml
. Het chauffeurslid is voorzien van @Autowired
zodat de lente de uitvoering kan injecteren.
Aangezien we gaan vertrouwen op het TestNG-spring-integratieraamwerk, testklasse TestNGSeleniumDriverInjectionExample
verlengt AbstractTestNGSpringContextTests
.
TestNGSeleniumDriverInjectionExample:
package com.javacodegeeks.testng.selenium; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.testng.AbstractTestNGSpringContextTests; import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @ContextConfiguration("driver_context.xml") public class TestNGSeleniumDriverInjectionExample extends AbstractTestNGSpringContextTests { @Autowired private WebDriver driver; @BeforeClass public void printBrowserUsed() { System.out.println("Driver used is: " + driver); } @Test public void searchTestNGInGoogle() { final String searchKey = "TestNG"; System.out.println("Search " + searchKey + " in google"); driver.navigate().to("http://www.google.com"); WebElement element = driver.findElement(By.name("q")); System.out.println("Enter " + searchKey); element.sendKeys(searchKey); System.out.println("submit"); element.submit(); (new WebDriverWait(driver, 10)).until(new ExpectedCondition() { public Boolean apply(WebDriver d) { return d.getTitle().toLowerCase() .startsWith(searchKey.toLowerCase()); } }); System.out.println("Got " + searchKey + " results"); } @AfterSuite public void quitDriver() throws Exception { driver.quit(); } }
testngDriverInjection.xml:
<?xml version="1.0" encoding="UTF-8"?> <suite name="TestNgSeleniumSuite" parallel="false"> <test name="TestNgSeleniumTest"> <classes> <class name="com.javacodegeeks.testng.selenium.TestNGSeleniumDriverInjectionExample" /> </classes> </test> </suite>
Uitvoer:
[TestNG] Running: C:\javacodegeeks_ws\testNGSelenium\src\test\resources\com\javacodegeeks\testng\selenium\testngDriverInjection.xml Driver used is: FirefoxDriver: firefox on WINDOWS (441cda6b-9e73-4594-b4e8-7134a1623c7d) Search TestNG in google Enter TestNG submit Got TestNG results =============================================== TestNgSeleniumSuite Total tests run: 1, Failures: 0, Skips: 0 ===============================================
4. TestNG Selenium datagedreven testvoorbeeld
Stel dat we meerdere zoekopdrachten in Google willen uitvoeren met behulp van onze zoekmethode, dan zouden we elke keer dat we de methode aanroepen verschillende zoekreeksen willen invoeren. In dit voorbeeld zal ik datagedreven testen demonstreren om meerdere zoekopdrachten in Google uit te voeren.
We zullen ons voorbeeld verder aanpassen en een parameter in onze zoekmethode introduceren. Omdat we meerdere keren zoeken, houden we de naam van de zoekmethode algemeen, noem deze searchGoogle()
. We zullen de gegevens verstrekken met behulp van een @DataProvider
methode genaamd searchStrings()
die "TestNG" en "Selenium" als zoektermen retourneert. De @Test
annotatie is aangepast en bevat searchGoogle
als de dataProvider
.
TestNGSeleniumDataDrivenSearchExample:
package com.javacodegeeks.testng.selenium; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.testng.AbstractTestNGSpringContextTests; import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; @ContextConfiguration("driver_context.xml") public class TestNGSeleniumDataDrivenSearchExample extends AbstractTestNGSpringContextTests { private WebDriver driver; @BeforeClass public void printBrowserUsed() { System.out.println("Driver used is: " + driver); } @Test(dataProvider = "searchStrings") public void searchGoogle(final String searchKey) { System.out.println("Search " + searchKey + " in google"); driver.navigate().to("http://www.google.com"); WebElement element = driver.findElement(By.name("q")); System.out.println("Enter " + searchKey); element.sendKeys(searchKey); System.out.println("submit"); element.submit(); (new WebDriverWait(driver, 10)).until(new ExpectedCondition() { public Boolean apply(WebDriver d) { return d.getTitle().toLowerCase() .startsWith(searchKey.toLowerCase()); } }); System.out.println("Got " + searchKey + " results"); } @DataProvider private Object[][] searchStrings() { return new Object[][] { { "TestNG" }, { "Selenium" } }; } @AfterSuite public void quitDriver() throws Exception { driver.quit(); } }
testngDataDrivenSearch.xml:
<?xml version="1.0" encoding="UTF-8"?> <suite name="TestNgSeleniumSuite" parallel="false"> <parameter name="browser" value="chrome"></parameter> <parameter name="driverPath" value="c://selenium/chromedriver.exe"></parameter> <test name="TestNgSeleniumTest"> <classes> <class name="com.javacodegeeks.testng.selenium.TestNGSeleniumDataDrivenSearchExample" /> </classes> </test> </suite>
Als we nu de test uitvoeren, wordt deze twee keer uitgevoerd, een keer voor "TestNG" en vervolgens voor "Selenium".
Uitvoer:
[TestNG] Running: C:\javacodegeeks_ws\testNGSelenium\src\test\resources\com\javacodegeeks\testng\selenium\testngDataDrivenSearch.xml Driver used is: FirefoxDriver: firefox on WINDOWS (ab3f6869-6669-4ccf-8e8f-9479f35aa790) Search TestNG in google Enter TestNG submit Got TestNG results Search Selenium in google Enter Selenium submit Got Selenium results =============================================== TestNgSeleniumSuite Total tests run: 2, Failures: 0, Skips: 0 ===============================================
5. TestNG Selenium Meerdere Browser Voorbeeld
Stel nu dat we onze test op meerdere browsers willen uitvoeren, het enige wat we hoeven te doen is onze initDriver()
parametreren methode en geef het de naam door van de browser waarop we onze test willen uitvoeren.
Op basis van de browser maken we ofwel ChromeDriver
of FirefixDriver
. We zullen de browsernaam doorgeven via testng.xml
.
TestNGSeleniumBrowserCfgVoorbeeld:
package com.javacodegeeks.testng.selenium; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.DataProvider; import org.testng.annotations.Optional; import org.testng.annotations.Parameters; import org.testng.annotations.Test; public class TestNGSeleniumBrowserCfgExample { private WebDriver driver; @Parameters({"browser", "driverPath"}) @BeforeTest public void initDriver(String browser, @Optional("") String driverPath) throws Exception { System.out.println("You are testing on browser " + browser); browser = browser.toLowerCase(); if (!driverPath.equals("")) { System.setProperty("webdriver.chrome.driver", driverPath); } if (browser.equals("chrome")) { driver = new ChromeDriver(); } else if (browser.equals("firefox")) { driver = new FirefoxDriver(); } else { throw new RuntimeException("Please create a driver for " + browser); } } @Test(dataProvider = "searchStrings") public void searchGoogle(final String searchKey) { System.out.println("Search " + searchKey + " in google"); driver.navigate().to("http://www.google.com"); WebElement element = driver.findElement(By.name("q")); System.out.println("Enter " + searchKey); element.sendKeys(searchKey); System.out.println("submit"); element.submit(); (new WebDriverWait(driver, 10)).until(new ExpectedCondition() { public Boolean apply(WebDriver d) { return d.getTitle().toLowerCase().startsWith(searchKey.toLowerCase()); } }); System.out.println("Got " + searchKey + " results"); } @DataProvider private Object[][] searchStrings() { return new Object[][] { { "TestNG" }, { "Selenium" } }; } @AfterTest public void quitDriver() throws Exception { driver.quit(); } }
testng.xml
zal twee tests hebben en beide tests zullen dezelfde testklasse uitvoeren. We willen TestNgSeleniumChromeTest
om in een Chrome-browser te draaien, dus we hebben de browser
. ingesteld parameter naar chrome
. Evenzo willen we TestNgSeleniumFirefoxTest
om in een Firefox-browser te draaien, zodat de browser
is ingesteld op waarde firefox
.
testngBrowserConfigurable.xml:
<?xml version="1.0" encoding="UTF-8"?> <suite name="TestNgSeleniumSuite" parallel="false"> <test name="TestNgSeleniumChromeTest"> <parameter name="browser" value="chrome"></parameter> <parameter name="driverPath" value="c://selenium/chromedriver.exe"></parameter> <classes> <class name="com.javacodegeeks.testng.selenium.TestNGSeleniumBrowserCfgExample" /> </classes> </test> <test name="TestNgSeleniumFirefoxTest"> <parameter name="browser" value="firefox"></parameter> <classes> <class name="com.javacodegeeks.testng.selenium.TestNGSeleniumBrowserCfgExample" /> </classes> </test> </suite>
Zoals je hieronder kunt zien, wordt de test voor beide browsers uitgevoerd.
Uitvoer:
[TestNG] Running: C:\javacodegeeks_ws\testNGSelenium\src\test\resources\com\javacodegeeks\testng\spring\testngBrowserConfigurable.xml You are testing on browser chrome Starting ChromeDriver 2.14.313457 (3d645c400edf2e2c500566c9aa096063e707c9cf) on port 7342 Only local connections are allowed. Search TestNG in google Enter TestNG submit Got TestNG results Search Selenium in google Enter Selenium submit Got Selenium results You are testing on browser firefox Search TestNG in google Enter TestNG submit Got TestNG results Search Selenium in google Enter Selenium submit Got Selenium results =============================================== TestNgSeleniumSuite Total tests run: 4, Failures: 0, Skips: 0 ===============================================
6. TestNG Op selenium gebaseerde tests
Stel dat u bepaalde tests pas wilt uitvoeren nadat een pagina is geladen, dan kunt u ervoor zorgen dat dit gebeurt door de tests afhankelijk te maken van de methode die verantwoordelijk is voor het laden van de pagina.
In het onderstaande voorbeeld openen we http://examples.javacodegeeks.com/ en zoeken vervolgens naar TestNG-artikelen. Zodra de pagina is geladen, zoeken we naar het artikel 'TestNG Maven Project Voorbeeld' en klikken erop.
Dit scenario heeft twee aspecten, het eerste betreft het zoeken naar TestNG-artikelen en het tweede, dat gaat over het klikken op een artikel in de zoekresultaten, komt pas in beeld nadat de zoekresultaten zijn geretourneerd.
Test in de onderstaande klas clickOnJCGTestNGArticle()
gaat over het klikken op het artikel 'TestNG Maven Project Voorbeeld', terwijl searchTestNGInJCG() gaat over het zoeken naar TestNG in Java Code Geeks. Sinds clickOnJCGTestNGArticle()
hangt af van test searchTestNGInJCG()
, we wijzigen @Test
annotatie en stel de dependsOnMethod
attribuut aan searchTestNGInJCG
.
TestNGSeleniumDependentMethodExample:
package com.javacodegeeks.testng.selenium; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.testng.AbstractTestNGSpringContextTests; import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @ContextConfiguration("driver_context.xml") public class TestNGSeleniumDependentMethodExample extends AbstractTestNGSpringContextTests { @Autowired private WebDriver driver; @BeforeClass public void printBrowserUsed() { System.out.println("Driver used is: " + driver); } @Test(dependsOnMethods="searchTestNGInJCG") public void clickOnJCGTestNGArticle() { System.out.println("You are in page " + driver.getTitle()); (new WebDriverWait(driver, 10)).until(new ExpectedCondition() { public Boolean apply(WebDriver d) { WebElement link = driver.findElement(By.linkText("TestNG Maven Project Example")); if (link != null) { System.out.println("Going to click on '" + link.getText() + "'"); link.click(); } return link != null; } }); assertPageTitle("TestNG Maven Project Example"); } @Test public void searchTestNGInJCG() { final String searchKey = "TestNG"; System.out.println("Search " + searchKey + " in JCG"); driver.navigate().to("http://examples.javacodegeeks.com/"); (new WebDriverWait(driver, 10)).until(new ExpectedCondition() { public Boolean apply(WebDriver d) { WebElement popup = d.findElement(By.linkText("Close this popup")); if (popup != null) { System.out.println("Found popup, close it"); popup.click(); } return popup != null; } }); WebElement element = driver.findElement(By.name("s")); System.out.println("Enter " + searchKey); element.sendKeys(searchKey); System.out.println("submit"); element.submit(); assertPageTitle("You searched for " + searchKey); System.out.println("Got " + searchKey + " results"); } private void assertPageTitle(final String title) { (new WebDriverWait(driver, 10)).until(new ExpectedCondition() { public Boolean apply(WebDriver d) { System.out.println("TITLE: " + d.getTitle()); return d.getTitle().toLowerCase() .startsWith(title.toLowerCase()); } }); } @AfterSuite public void quitDriver() throws Exception { driver.quit(); } }
testngDependencyTests.xml:
<?xml version="1.0" encoding="UTF-8"?> <suite name="TestNgSeleniumSuite" parallel="false"> <test name="TestNgSeleniumTest"> <classes> <class name="com.javacodegeeks.testng.selenium.TestNGSeleniumDependentMethodExample" /> </classes> </test> </suite>
In de onderstaande uitvoer kunt u zien dat er eerst naar 'TestNG'-artikelen wordt gezocht en vervolgens naar het artikel 'TestNG Maven-projectvoorbeeld'.
Uitvoer:
[TestNG] Running: C:\javacodegeeks_ws\testNGSelenium\src\test\resources\com\javacodegeeks\testng\selenium\testngDependencyTests.xml Driver used is: FirefoxDriver: firefox on WINDOWS (07d0226b-8d03-4ec1-8a62-fb7ae09546be) Search TestNG in JCG Found popup, close it Enter TestNG submit TITLE: You searched for TestNG | Examples Java Code Geeks Got TestNG results You are in page You searched for TestNG | Examples Java Code Geeks Going to click on 'TestNG Maven Project Example' TITLE: TestNG Maven Project Example | Examples Java Code Geeks =============================================== TestNgSeleniumSuite Total tests run: 2, Failures: 0, Skips: 0 ===============================================
Download het Eclipse-project
In dit artikel heb ik u enkele voorbeelden laten zien van TestNG- en Selenium-integratie.