selenium phantomjs tutorial
V tem članku je s primeri kode pojasnjena avtomatizacija selena s PhantomJS:
PhantomJS je brezglavi brskalnik, ki se uporablja predvsem za avtomatizacijo brez GUI.
Zmogljivost in izvajanje v tem brskalniku je hitrejše in se običajno uporablja v scenarijih, kjer ročno spremljanje ni potrebno, in v tistih aplikacijah, ki so popolnoma avtomatizirane.
PhantomJS je zelo priporočljiv v primeru izvajanja skripta čez noč, kjer človeško spremljanje ni potrebno, saj je izvajanje hitro hitro. Ponuja tudi možnosti za samodejni posnetek zaslona za ročno sledenje postopku izvajanja skripta.
Kaj se boste naučili:
- Uporaba PhantomJS pri avtomatizaciji spletnih strani
- PhantomJS in selen za spletno avtomatizacijo (osnovno)
- PhantomJS in selen za spletno avtomatizacijo (napredno)
- Posnetek zaslona in poročilo
- Priporočilo za uporabo PhantomJS kot testnega brskalnika
- Priporočeno branje
Uporaba PhantomJS pri avtomatizaciji spletnih strani
V tem članku bomo z orodjem za avtomatizacijo Selenium izvajali funkcionalno avtomatizacijo v brskalniku PhantomJS.
PhantomJS dejansko ustvari brskalnik, ki nima vmesnika GUI, ima pa vse standarde brskalnika z vmesnikom GUI, kot so (Firefox, IE itd.), Standardni DOM skript, Ajax klici itd.
Cilj uporabe PhantomJS s selenom
Zelo pomembno je razumeti cilj uporabe PhantomJS s selenom.
Vsi vemo, da je Selenium funkcionalno orodje za avtomatizacijo, ki se uporablja za avtomatizacijo različnih funkcionalnosti spletnih aplikacij.
Zdaj je cilj PhantomJS nekoliko drugačen, saj je brskalnik brez grafičnega uporabniškega vmesnika, njegova primarna uporaba pa je avtomatizacija testnih primerov, ki spadajo v kategorijo preskusov dima / validacije in ne popolne regresivne testne avtomatizacije.
Če avtomatiziramo uporabo selena in PhantomJS, moramo biti previdni pri izbiri testnih primerov. Drug pomemben del je sledenje statusu izvedbe testnih primerov, saj fizično ne moremo videti izvedbe.
PhantomJS in selen za spletno avtomatizacijo (osnovno)
Tako kot vsi drugi brskalniki z vmesnikom GUI (Firefox, IE, Chrome itd.) Ima tudi za PhantomJS standardni program API za podporo avtomatizaciji.
Ponazorimo enako s preprosto kodo:
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(); } }
Zažene se zgornji delček kode Uradna spletna stran selena v brskalniku PhantomJS in izvede zaklepanje na zavihku za prenos. Nato izračuna število h3 označenih glav glavne vsebine na strani za prenos in jo natisne.
preizkusite spletno mesto za ranljivost vbrizgavanja sql
Po izvedbi vsake operacije naredi posnetek zaslona za ročno sledenje.
katere so faze sdlc
Zdaj bomo isto testno funkcionalnost integrirali v ogrodje s sledenjem dnevnikom skupaj s posnetkom zaslona. Dodajmo še samodejno pošiljanje skupaj z integracijo poročila o obsegu, da dobimo popolno avtomatizacijo, da bomo lahko kasneje spremljali rezultat izvajanja.
PhantomJS in selen za spletno avtomatizacijo (napredno)
Slika okvirne strukture
Okvir je takšen, kot kaže slika, in je sestavljen iz:
- Komponente za večkratno uporabo, ki jih lahko znova uporabijo vsi preizkusni skripti
- Testna komponenta, ki bo ustvarjena nova z vsakim novim testnim primerom.
- Komponente virov, ki so vložki ogrodja, kot so (lokatorji spletnih elementov, URL itd.)
Tu projekt temelji na Mavenu skupaj s testnim ogrodjem TestNG. Uporabili smo tudi poročilo o obsegu. Vendar se ne spuščam v podrobnosti poročila o projektu Maven ali poročila o obsegu, ampak se samo osredotočam na PhantomJS.
Podrobnosti kode za vsako komponento so navedene spodaj. Ta okvir je namenjen osredotočanju na izvajanje phantomJS, zato je okvir zasnovan na podlagi tega, vendar ga lahko zagotovo razširimo v skladu s svojo poslovno specifikacijo.
Najprej bomo videli, v katerih odvisnostih se moramo prijaviti POM.xml za izvedbo tega projekta
'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
Komponente za večkratno uporabo
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
Ta del kode je povezan z brskalnikom.
Tu je ime brskalnika trdo kodirano. Lahko pa ga eksternaliziramo (v lastnostih / Excelovem listu). Izberemo lahko brskalnik, ki ga bomo uporabili, tukaj pa smo uporabili 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
Ta del kode je povezan z datoteko lastnosti branja, ki smo jo uporabili kot lokator spletnega elementa in vsebnik URL-ja.
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
Ta del kode obravnava različne funkcije selena, ki jih redno uporabljamo v svojih skriptih, vendar smo te funkcije ločili od testnih skriptov, da bi zmanjšali vrstice kode v okviru in povečali njeno uporabnost.
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
Ta del kode obravnava pošiljanje avtomatiziranega sporočila po izvedbi testnega primera.
Preskusne komponente
katera je najboljša aplikacija za vohunjenje
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
To je dejanski testni primer, kjer:
- Začenjamo URL.
- Kliknemo zavihek za prenos in preverimo, ali je povezavo za prenos mogoče klikniti ali ne.
- Beremo vse glave h3 na zavihku za prenos strani.
- Preverjamo število h3 glav.
Komponente za večkratno uporabo
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.properties
Download_Tab = Download H3_Headerlist= (//div(@id='mainContent')//h3(1))
ObjectRepository.properties
To so vhodi, ki se vnašajo v ta okvir, saj je okvir zasnovan tako, da temelji na podatkih.
- ScreenShotLoc.java shrani mesto zaslona v pogon in lokacijo gonilnika brskalnika.
- APPURL.properties shrani URL aplikacije, vključen v preskušanje.
- ObjectRepository.properties shranjuje lokatorje spletnih elementov.
Posnetek zaslona in poročilo
Zdaj si bomo ogledali poročilo po izvedbi:
Pozitiven scenarij: Zgornji posnetek zaslona je poročilo, ki se ustvari, ko so vsi testni koraki samodejnih testnih primerov uspešno izvedeni.
Negativni scenarij: Zgornji posnetek zaslona je poročilo, ki se ustvari, ko se vsi preizkusni koraki samodejnih testnih primerov ne izvedejo uspešno.
Samodejni posnetek zaslona pošte:
Priporočilo za uporabo PhantomJS kot testnega brskalnika
Spodaj je nekaj priporočil o tem, kdaj uporabiti PhantomJS kot testni brskalnik.
- Izvedba je hitra z dobrimi zmogljivostmi.
- Dober kandidat za avtomatizacijo, če ročno spremljanje ni potrebno, saj brskalnik nima manj uporabniškega vmesnika.
- Zelo priporočljivo, če so testni primeri zasnovani za izvajanje dimnih testov ali testnih primerov, pri katerih se upoštevajo le točke validacije.
- Ni priporočljivo za regresivno funkcionalno testiranje.
Predlagano branje = >> Posnetki zaslona v selenu
Veselo branje !!
Priporočeno branje
- Vadnica za kumare selena: Integracija kumar Java Selenium WebDriver
- 7 dejavnikov, ki vplivajo na preskusno oceno projekta za avtomatizacijo selena - vadnica za selen št. 32
- Appium Studio za Eclipse: samodejna avtomatizacija Appium / Selen iz Eclipse
- Uvod v Selenium WebDriver - Vadnica za selenij št. 8
- Vadnica za mrežo selena: namestitev in primer preskušanja med brskalniki
- Vadnica za ChromeDriver Selenium: Preskusi Selenium Webdriver v Chromu
- Učinkoviti scenariji za skriptiranje in odpravljanje težav s selenijem - Vadnica za selenij št. 27
- Odpravljanje napak v skriptih selena z dnevniki (Vadnica za Log4j) - Vadnica za selen # 26