selenium phantomjs tutorial
I denne artikkelen blir Selenium Automation With PhantomJS forklart med kodeeksempler:
PhantomJS er en hodeløs nettleser som primært brukes til GUI mindre automatisering.
Ytelsen og utførelsen som skjer i denne nettleseren er raskere og brukes vanligvis i scenarier der manuell overvåking ikke er nødvendig, og på applikasjoner som er helt automatiserbare.
PhantomJS anbefales på det sterkeste i tilfelle skriptkjøring over natten, hvor menneskelig overvåking ikke er nødvendig da utførelsen er rask. Det gir også muligheter for et automatisk skjermbilde for manuell sporing av skriptutførelsesprosessen.
Hva du vil lære:
- PhantomJS-bruk på nettsideautomatisering
- PhantomJS og selen for nettautomatisering (grunnleggende)
- PhantomJS og selen for nettautomatisering (avansert)
- Skjermbilde og rapport etter utførelse
- Anbefaling om å bruke PhantomJS som testleser
- Anbefalt lesing
PhantomJS-bruk på nettsideautomatisering
I denne artikkelen vil vi bruke Selenium-automatiseringsverktøyet til å utføre funksjonell automatisering på PhantomJS-nettleseren.
PhantomJS instantierer faktisk en nettleser som ikke har et GUI-grensesnitt, men den har all standard for en nettleser med et GUI-grensesnitt som (Firefox, IE, etc.), standard DOM-skripting, Ajax-samtaler, etc.
Målet med å bruke PhantomJS med selen
Det er veldig viktig å forstå målet med å bruke PhantomJS med selen.
Vi vet alle at Selenium er et funksjonelt automatiseringsverktøy som brukes til å automatisere ulike funksjoner i webapplikasjoner.
Nå er målet med PhantomJS litt annerledes, ettersom det er en nettleser med mindre brukergrensesnitt, og den primære bruken er å automatisere testsakene med å falle inn under kategorien røykprøve / valideringstester og ikke fullverdig regressiv testautomatisering.
Hvis vi automatiserer ved bruk av Selen og PhantomJS, må vi være forsiktige med å velge testsaker. En annen viktig del er sporing av eksekveringsstatus for testsaker, ettersom vi ikke fysisk kan se henrettelsen.
PhantomJS og selen for nettautomatisering (grunnleggende)
Akkurat som alle andre nettlesere med GUI-grensesnitt (Firefox, IE, Chrome, etc.), for PhantomJS også, har Selenium et standard API for å støtte automatiseringen.
La oss illustrere det samme med en enkel kode:
import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; import org.apache.commons.io.FileUtils; import org.openqa.selenium.By; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.phantomjs.PhantomJSDriver; import org.openqa.selenium.phantomjs.PhantomJSDriverService; import org.openqa.selenium.remote.DesiredCapabilities; public class PhantomJSTest { public void phantomJS() throws InterruptedException, IOException { DesiredCapabilities caps = new DesiredCapabilities(); caps.setJavascriptEnabled(true); caps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, 'D:\chromedriver\phantomjs-2.1.1-windows\bin\phantomjs.exe'); caps.setCapability('takesScreenshot', true); PhantomJSDriver driver = new PhantomJSDriver(caps); String baseUrl = 'http://www.google.com'; driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); driver.get(baseUrl + '/'); File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(scrFile, new File('d:\PhantomJSSample\screenshotAfterLaunchingGoogle.jpeg'),true); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); driver.navigate().to('https://selenium.dev//');//Launch URL File scrFile1 = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(scrFile1, new File('d:\PhantomJSSample\screenshotAfterLaunchingURL.jpeg'),true); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); driver.findElement(By.linkText('Download')).click();//Click on the Link driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); File scrFile2 = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(scrFile2, new File('d:\PhantomJSSample\screenshotAfterClickingDownload.jpeg'),true); Thread.sleep(2000); int header_size =driver.findElements(By.xpath('(//div(@id='mainContent')//h3(1))')).size();//Get the total count of h3 headers in the page for(int i=1; i?=header_size; i++) { String suggestion_name_xp = '('+'//div(@id='mainContent')//h3(1)'+')'+'('+i+')'; String header =driver.findElement(By.xpath(suggestion_name_xp)).getText(); System.out.println(header); //Print the name of headers } Thread.sleep(2000); } public static void main(String() args) throws InterruptedException, IOException { PhantomJSTest pj =new PhantomJSTest(); pj.phantomJS(); } }
Ovennevnte kodebit starter Selenium offisielle nettsted i PhantomJS-nettleseren og utfører klikkoperasjon i nedlastingsfanen. Deretter beregner det antall h3-taggede overskrifter for hovedinnholdet på nedlastingssiden og skriver det ut.
beste gratis pc tune up programmer
Etter utførelsen av hver operasjon tar det et skjermbilde for manuell sporing.
beste programvaren for å forbedre pc-ytelsen
Nå vil vi integrere den samme testfunksjonaliteten i et rammeverk med loggsporing sammen med skjermbildet. La oss også legge til automatisk utsendelse sammen med omfangsrapportintegrering for å gi den en fullstendig automatiseringsomslag, slik at vi kan spore utførelsesresultatet senere.
PhantomJS og selen for nettautomatisering (avansert)
Bilde av rammestrukturen
Rammeverket er som bildet antyder og består av:
- De gjenbrukbare komponentene som kan brukes på nytt av hvert testskript
- Testkomponenten som blir opprettet ny med hver nye testtilfelle.
- Ressurskomponentene som er inngangene til rammeverket som (Web Element locators, URL, etc.)
Her er prosjektet bygget på Maven sammen med testrammeverket TestNG. Vi har også brukt omfangsrapport. Men jeg kommer ikke inn på detaljene i et Maven-prosjekt eller omfangsrapport, men holder bare fokus på PhantomJS.
Kodedetaljer for hver av komponentene er gitt nedenfor. Dette rammeverket er ment å fokusere på implementeringen av phantomJS, så rammeverket er designet ut fra det, men man kan definitivt utvide dette rammeverket i henhold til ens egen forretningsspesifikasjon.
Først vil vi se hvilke avhengigheter vi trenger å erklære i POM.xml for å kunne kjøre dette prosjektet
'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' > 4.0.0 com.phantom.com com.phantomjs.com 0.0.1-SNAPSHOT org.apache.maven.plugins maven-resources-plugin 3.0.2 maven-plugin org.seleniumhq.selenium selenium-java 3.11.0 org.testng testng 6.8 test com.github.detro.ghostdriver phantomjsdriver 1.0.1 javax.mail mail 1.4 com.relevantcodes extentreports 2.40.2
POM.xml
Gjenbrukbare komponenter
package ReusableElements; import java.io.File; import java.util.List; import java.util.concurrent.TimeUnit; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.phantomjs.PhantomJSDriver; import org.openqa.selenium.phantomjs.PhantomJSDriverService; import org.openqa.selenium.remote.DesiredCapabilities; import org.testng.annotations.BeforeClass; import com.relevantcodes.extentreports.ExtentReports; import com.relevantcodes.extentreports.ExtentTest; import com.relevantcodes.extentreports.LogStatus; import ScreenShotLoc.ScreenShotLocations; public class InitiateBrowser { public static WebDriver driver = null; public ExtentReports extent; public ExtentTest logger; String workingDir = ScreenShotLocations.extentReportLoc; PropertyReader pr = new PropertyReader(); @BeforeClass public void InitBrowser() { extent = new ExtentReports(workingDir+'\ExtentReports\PhantomJSExectionResults.html', true); logger=extent.startTest('PhantomJS Implementation'); String BrowserName = 'PhantomJS'; if(BrowserName.equalsIgnoreCase('PhantomJS')) { DesiredCapabilities caps = new DesiredCapabilities(); caps.setJavascriptEnabled(true); caps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, ScreenShotLocations.PhantomJSdriverLoc); caps.setCapability('takesScreenshot', true); driver = new PhantomJSDriver(caps); List baseUrls = pr.URLReader(); String baseUrl= baseUrls.get(0); String altUrl= baseUrls.get(1); driver.get(baseUrl); logger.log(LogStatus.PASS, 'Browser Initiated'); driver.navigate().to(altUrl); logger.log(LogStatus.PASS, 'Navigated to target browser'); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); } else if(BrowserName.equalsIgnoreCase('Chrome')) { System.setProperty('webdriver.chrome.driver',ScreenShotLocations.ChromedriverLoc); driver = new ChromeDriver(); List baseUrls = pr.URLReader(); String baseUrl= baseUrls.get(0); driver.get(baseUrl); logger.log(LogStatus.PASS, 'Browser Initiated'); driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); } } }
InitiateBrowser.java
Denne koden er assosiert med Browser Initiation.
Her er nettlesernavnet hardkodet. Men det kan eksternaliseres (i egenskaper / excel-ark). Man kan velge hvilken nettleser du vil bruke, og her har vi brukt PhantomJS.
package ReusableElements; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Properties; public class PropertyReader { Listvals = new ArrayList(); public List PropReader(){ Properties prop = new Properties(); try { prop.load(PropertyReader.class.getClassLoader().getResourceAsStream('ObjectRepository.properties')); vals.add(prop.getProperty('Download_Tab')); vals.add(prop.getProperty('H3_Headerlist')); } catch (IOException ex) { ex.printStackTrace(); } return vals; } public List URLReader() { Properties prp = new Properties(); try { prp.load(PropertyReader.class.getClassLoader().getResourceAsStream('APPURL.properties')); vals.add(prp.getProperty('APPURL')); vals.add(prp.getProperty('ALTERNATE_APPURL')); }catch (IOException ex) { ex.printStackTrace(); } return vals; } }
PropertyReader.java
Denne koden er assosiert med leseegenskapsfilen som vi har brukt som webelementlokator og URL-container.
package ReusableElements; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.openqa.selenium.By; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; public class ReuseableMethods extends InitiateBrowser { public void LinktextClick(String loc) { driver.findElement(By.linkText(loc)).click();//Click on the Link } public String GetText(String loc) { String text= driver.findElement(By.xpath(loc)).getText(); return text; } public void takeScreenShot(String loc) throws IOException { File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(scrFile, new File(loc),true); } }
ReuseableMethods.java
Denne kodebiten tar for seg forskjellige selenfunksjoner som vi bruker regelmessig i skriptene våre, men vi har skilt disse funksjonene fra testskriptene for å redusere kodelinjene i rammeverket og øke dets brukervennlighet.
package ReusableElements; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; public class SendMail { public void SendAutomatedMail() { final String from='XXXX';//change accordingly final String user='XXXX';//change accordingly final String password='XXXX';//change accordingly final String to='XXXX';//change accordingly //Creating the object for the session Properties props = new Properties(); props.put('mail.smtp.auth', 'true'); props.put('mail.smtp.starttls.enable', 'true'); props.put('mail.smtp.host','smtp.gmail.com'); props.put('mail.smtp.port', '587'); Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(user,password); } }); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); message.setSubject('TestExecution completed!! Please find the report'); BodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText('Hi All'); messageBodyPart.setText('please find the attachment'); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); messageBodyPart = new MimeBodyPart(); String filename = 'D:/PhantomJSSample/ExtentReports/PhantomJSExectionResults.html'; DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); multipart.addBodyPart(messageBodyPart); message.setContent(multipart); Transport.send(message); System.out.println('message sent successfully...'); } catch (MessagingException e) {e.printStackTrace();} } }
SendMail.java
Denne koden handler om å sende en automatisert post etter gjennomføringen av testsaken.
Test komponenter
package com.phantomjs.com; import java.util.ArrayList; import java.util.List; import java.io.IOException; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.NoSuchElementException; import org.testng.annotations.Test; import com.relevantcodes.extentreports.LogStatus; import ReusableElements.InitiateBrowser; import ReusableElements.PropertyReader; import ReusableElements.ReuseableMethods; import ReusableElements.SendMail; import ScreenShotLoc.ScreenShotLocations; public class TestScripts extends InitiateBrowser { @Test public void TestScript() throws IOException, InterruptedException { ReuseableMethods rm =new ReuseableMethods(); PropertyReader prop =new PropertyReader(); SendMail sm = new SendMail(); String download,h3_header; rm.takeScreenShot(ScreenShotLocations.screenshotAfterLaunchingURL); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); List propvals = prop.PropReader(); download= propvals.get(0); h3_header= propvals.get(1); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); try{ rm.LinktextClick(download);//Click on the Link logger.log(LogStatus.PASS, 'Validate if download Tab is clickable'); } catch(NoSuchElementException e) { logger.log(LogStatus.FAIL, 'Error while clicking on download Tab'); } driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); rm.takeScreenShot(ScreenShotLocations.screenshotAfterClickingDownload); Thread.sleep(2000); try{ int header_size =driver.findElements(By.xpath(h3_header)).size();//Get the total count of h3 headers in the page List headersh3 = new ArrayList(); for(int i=1; i?header_size; i++) { String suggestion_name_xp = '('+h3_header+')'+'('+i+')'; String header =rm.GetText(suggestion_name_xp); System.out.println(header); //Print the name of headers headersh3.add(header); //storing h3 main content headers to the list } logger.log(LogStatus.PASS, 'All main content h3 headers list printed on console'); int headers_count = headersh3.size(); if(headers_count==4) { logger.log(LogStatus.PASS, 'Validate if the main content h3 header count is as per business specification'); } Thread.sleep(2000); } catch(NoSuchElementException e) { logger.log(LogStatus.FAIL, 'Error while printing h3 headers list on console'); } extent.endTest(logger); extent.flush(); sm.SendAutomatedMail(); } }
TestScripts.java
Dette er selve prøvesaken der:
- Vi lanserer URL-en.
- Vi klikker på nedlastingsfanen og bekrefter at nedlastingskoblingen er klikkbar eller ikke.
- Vi leser alle h3-topptekstene på nedlastingsfanen på siden.
- Vi validerer antall h3-overskrifter.
Gjenbrukbare komponenter
package ScreenShotLoc; public interface ScreenShotLocations { String screenshotAfterLaunchingURL= 'd:\PhantomJSSample\screenshotAfterLaunchingURL.jpeg'; String screenshotAfterClickingDownload= 'd:\PhantomJSSample\screenshotAfterClickingDownload.jpeg'; String extentReportLoc= 'd:\PhantomJSSample\'; String ChromedriverLoc= 'D:\chromedriver\chromedriver.exe'; String PhantomJSdriverLoc= 'D:\phantomjs-2.1.1-windows\bin\phantomjs.exe'; }
ScreenShotLocations.java
APPURL = https://www.google.com ALTERNATE_APPURL = https://selenium.dev/
APPURL. Eiendommer
Download_Tab = Download H3_Headerlist= (//div(@id='mainContent')//h3(1))
ObjectRepository.properties
Dette er inngangene som blir matet til dette rammeverket, ettersom rammeverket er designet for å være datadrevet.
- ScreenShotLoc.java lagrer skjermbildeplassering i stasjonen og nettleserdriverplasseringen.
- APPURL.properties lagrer applikasjons-URL-en som er involvert i testingen.
- ObjectRepository.properties lagrer webelementlokatorer.
Skjermbilde og rapport etter utførelse
Nå skal vi se rapporten etter utførelsen:
Positivt scenario: Skjermbildet ovenfor er rapporten som genereres når alle teststrinnene i de automatiserte testsakene er utført.
Negativt scenario: Skjermbildet ovenfor er rapporten som genereres når alle testtrinnene i de automatiserte testsakene ikke er utført.
Skjermbilde av automatisert post:
Anbefaling om å bruke PhantomJS som testleser
Nedenfor er noen anbefalinger om når du skal bruke PhantomJS som testleser.
- Utførelsen er rask med god ytelse.
- En god kandidat for automatisering hvis manuell overvåking ikke er nødvendig, da nettleseren ikke er GUI mindre.
- Anbefales på det sterkeste når testtilfellene er utformet for å utføre røykprøver eller testtilfeller der valideringspunkter bare tas i betraktning.
- Ikke anbefalt for regressiv funksjonstesting.
Foreslått lese = >> Skjermbilder i selen
hvordan du viser en eps-fil
Glad lesning !!
Anbefalt lesing
- Agurk Selen Tutorial: Agurk Java Selen WebDriver Integration
- 7 faktorer som påvirker testestimering av Selenium Automation Project - Selenium Tutorial # 32
- Appium Studio for Eclipse: End-to-end Appium / Selenium Automation From Eclipse
- Introduksjon til Selen WebDriver - Selenium Tutorial # 8
- Selenium Grid Tutorial: Setup and Example of Cross Browser Testing
- ChromeDriver Selenium Tutorial: Selen Webdriver Tests on Chrome
- Effektiv Selen Scripting og feilsøking av scenarier - Selenium Tutorial # 27
- Feilsøking av selen-skript med logger (Log4j-opplæring) - Selen-opplæring # 26