selenium phantomjs tutorial
V tomto článku je vysvetlená automatizácia selénu pomocou programu PhantomJS s príkladmi kódov:
PhantomJS je bezhlavý prehliadač, ktorý sa primárne používa na automatizáciu bez grafického používateľského rozhrania.
Výkon a vykonávanie v tomto prehľadávači je rýchlejšie a zvyčajne sa používa v scenároch, kde sa nevyžaduje manuálne sledovanie, a v tých aplikáciách, ktoré sú úplne automatizované.
PhantomJS sa veľmi odporúča v prípade vykonávania skriptov cez noc, kde nie je potrebné ľudské sledovanie, pretože vykonávanie je rýchle a rýchle. Poskytuje tiež možnosti automatického snímania obrazovky pre manuálne sledovanie procesu vykonávania skriptu.
Čo sa dozviete:
- Využitie PhantomJS na automatizáciu webových stránok
- PhantomJS a selén pre automatizáciu webu (základné)
- PhantomJS a selén pre automatizáciu webu (pokročilé)
- Screenshot a správa po vykonaní
- Odporúčanie používať PhantomJS ako testovací prehliadač
- Odporúčané čítanie
Využitie PhantomJS na automatizáciu webových stránok
V tomto článku budeme používať nástroj na automatizáciu selénu na vykonávanie funkčnej automatizácie v prehliadači PhantomJS.
PhantomJS v skutočnosti vytvára inštanciu prehľadávača, ktorý nemá rozhranie GUI, ale má všetky štandardy prehľadávača s rozhraním GUI, ako je (Firefox, IE, atď.), Štandardné skriptovanie DOM, volania Ajaxu atď.
Cieľ použitia PhantomJS so selénom
Je veľmi dôležité pochopiť cieľ použitia PhantomJS so selénom.
Všetci vieme, že selén je funkčný automatizačný nástroj, ktorý sa používa na automatizáciu rôznych funkcií webových aplikácií.
Cieľ programu PhantomJS je teraz trochu odlišný, pretože ide o prehliadač bez grafického používateľského rozhrania a jeho primárnym využitím je automatizácia testovacích prípadov spadajúcich do kategórie testov dymu / overovacích testov a nie plnohodnotnej automatizácie regresných testov.
Ak automatizujeme použitie selénu a PhantomJS, musíme byť pri výbere testovacích prípadov opatrní. Ďalšou dôležitou súčasťou je sledovanie stavu vykonania testovacích prípadov, pretože vykonanie fyzicky nevidíme.
PhantomJS a selén pre automatizáciu webu (základné)
Rovnako ako všetky ostatné prehľadávače s rozhraním GUI (Firefox, IE, Chrome atď.), Aj pre PhantomJS má Selenium štandardné API na podporu automatizácie.
Ilustrujme to isté pomocou jednoduchého kódu:
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(); } }
Spustí sa vyššie uvedený úryvok kódu Oficiálna webová stránka selénu v prehliadači PhantomJS a vykoná kliknutie na karte sťahovania. Potom vypočíta počet hlavičiek označených h3 hlavného obsahu na stránke na stiahnutie a vytlačí ho.
čo je testovanie zdravého rozumu pri testovaní softvéru
Po vykonaní každej operácie urobí snímku obrazovky pre manuálne sledovanie.
ako sledovať anime online zadarmo
Teraz integrujeme rovnakú funkcionalitu testu do rámca so sledovaním protokolov spolu so snímkou obrazovky. Pridajme tiež automatické odosielanie pošty spolu s integráciou prehľadov rozsahu, aby sme zaistili úplné zabalenie automatizácie, aby sme mohli neskôr sledovať výsledok vykonávania.
PhantomJS a selén pre automatizáciu webu (pokročilé)
Obrázok rámcovej štruktúry
Rámec je taký, ako naznačuje obrázok, a je tvorený:
- Opätovne použiteľné komponenty, ktoré môžu byť znovu použité každým testovacím skriptom
- Komponent testu, ktorý bude vytvorený s každým novým testovacím prípadom nový.
- Komponenty zdrojov, ktoré sú vstupmi rámca, ako sú (lokátory webových prvkov, URL atď.)
Tu je projekt postavený na Mavene spolu s testovacím rámcom TestNG. Použili sme tiež rozsah správy. Nejdem však do podrobností o projekte alebo správe rozsahu Maven, ale iba sa sústredím na PhantomJS.
Ďalej sú uvedené podrobnosti o kóde pre každú zo zložiek. Cieľom tohto rámca je zamerať sa na implementáciu phantomJS, takže rámec je navrhnutý na základe toho, je však možné tento rámec určite rozšíriť podľa vlastnej obchodnej špecifikácie.
Najskôr uvidíme, v akých závislostiach musíme deklarovať POM.xml za účelom uskutočnenia tohto projektu
'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
Opätovne použiteľné komponenty
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
Táto časť kódu je spojená s inicializáciou prehliadača.
Tu je názov prehľadávača napevno. Ale dá sa to externalizovať (vo vlastnostiach / excelovom hárku). Jeden si môže zvoliť, ktorý prehliadač použiť, a tu sme použili 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
Táto časť kódu je spojená so súborom vlastností čítania, ktorý sme použili ako vyhľadávač webových prvkov a kontajner adresy URL.
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
Táto časť kódu sa zaoberá rôznymi selénovými funkciami, ktoré pravidelne používame v našich skriptoch, ale tieto funkcie sme oddelili od testovacích skriptov, aby sme zmenšili riadky kódu v rámci a zvýšili jeho použiteľnosť.
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
Táto časť kódu sa zaoberá odosielaním automatizovanej pošty po vykonaní testovacieho prípadu.
Testovacie komponenty
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
Toto je skutočný testovací prípad, keď:
- Spúšťame adresu URL.
- Klikáme na kartu sťahovania a overujeme, či na odkaz na stiahnutie je možné kliknúť alebo nie.
- Čítame všetky hlavičky h3 na karte sťahovania stránky.
- Overujeme počet hlavičiek h3.
Opätovne použiteľné komponenty
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.vlastnosti
Download_Tab = Download H3_Headerlist= (//div(@id='mainContent')//h3(1))
ObjectRepository.properties
Toto sú vstupy dodávané do tohto rámca, pretože rámec je navrhnutý tak, aby bol riadený údajmi.
- ScreenShotLoc.java ukladá umiestnenie snímky obrazovky na jednotke a umiestnenie ovládača prehľadávača.
- APPURL.properties ukladá adresu URL aplikácie zapojenú do testovania.
- ObjectRepository.properties ukladá lokátory webových prvkov.
Screenshot a správa po vykonaní
Teraz uvidíme správu po vykonaní:
Pozitívny scenár: Vyššie uvedená snímka obrazovky je správa generovaná pri úspešnom vykonaní všetkých krokov testu automatizovaných testovacích prípadov.
v ktorej fáze životného cyklu systému sa testovanie softvéru vykonáva
Negatívny scenár: Vyššie uvedená snímka obrazovky je správa vygenerovaná, keď sa všetky kroky testu automatizovaných testovacích prípadov nevykonajú úspešne.
Screenshot automatickej pošty:
Odporúčanie používať PhantomJS ako testovací prehliadač
Ďalej je uvedených niekoľko odporúčaní, kedy sa má program PhantomJS použiť ako testovací prehliadač.
- Vykonanie je rýchle a má dobrý výkon.
- Dobrý kandidát na automatizáciu, ak sa nevyžaduje manuálne sledovanie, pretože prehľadávač nemá menšie grafické rozhranie.
- Dôrazne sa odporúča, ak sú testovacie prípady určené na vykonávanie dymových testov alebo testovacích prípadov, v ktorých sa zohľadňujú iba validačné body.
- Neodporúča sa pre regresné testovanie funkcií.
Navrhované čítanie = >> Screenshoty na seléne
Príjemné čítanie !!
Odporúčané čítanie
- Výukový program Cucumber Selenium: Cucumber Java Selenium WebDriver Integration
- 7 faktorov ovplyvňujúcich odhad testu projektu automatizácie selénu - selén výučba # 32
- Appium Studio pre Eclipse: Kompletná automatizácia Appium / Selenium od spoločnosti Eclipse
- Úvod do softvéru Selenium WebDriver - Výučba selénu č. 8
- Výukový program pre selenovú mriežku: Nastavenie a príklad testovania medzi prehliadačmi
- Výukový program pre selén ChromeDriver: Testy selenového webdriveru v prehliadači Chrome
- Efektívne skriptovanie selénu a riešenie problémov - scenáre selénu # 27
- Ladenie selénových skriptov pomocou denníkov (výučba Log4j) - výučba selénu č. 26