How to use getDriver method of org.fluentlenium.utils.ImageUtils class

Best FluentLenium code snippet using org.fluentlenium.utils.ImageUtils.getDriver

Source:FluentDriver.java Github

copy

Full Screen

...102 private CssControl getCssControl() {103 return cssControl;104 }105 private void configureDriver() {106 if (getDriver() != null && getDriver().manage() != null && getDriver().manage().timeouts() != null) {107 if (configuration.getPageLoadTimeout() != null) {108 getDriver().manage().timeouts().pageLoadTimeout(configuration.getPageLoadTimeout(), TimeUnit.MILLISECONDS);109 }110 if (configuration.getImplicitlyWait() != null) {111 getDriver().manage().timeouts().implicitlyWait(configuration.getImplicitlyWait(), TimeUnit.MILLISECONDS);112 }113 if (configuration.getScriptTimeout() != null) {114 getDriver().manage().timeouts().setScriptTimeout(configuration.getScriptTimeout(), TimeUnit.MILLISECONDS);115 }116 }117 }118 @Override119 public void takeHtmlDump() {120 takeHtmlDump(new Date().getTime() + ".html");121 }122 @Override123 public void takeHtmlDump(String fileName) {124 File destFile = null;125 try {126 if (configuration.getHtmlDumpPath() == null) {127 destFile = new File(fileName);128 } else {129 destFile = Paths.get(configuration.getHtmlDumpPath(), fileName).toFile();130 }131 String html;132 synchronized (FluentDriver.class) {133 html = $("html").first().html();134 }135 FileUtils.write(destFile, html, "UTF-8");136 } catch (Exception e) {137 if (destFile == null) {138 destFile = new File(fileName);139 }140 try (PrintWriter printWriter = new PrintWriter(destFile, "UTF-8")) {141 printWriter.write("Can't dump HTML");142 printWriter.println();143 e.printStackTrace(printWriter);144 } catch (IOException e1) {145 throw new RuntimeException("error when dumping HTML", e); //NOPMD PreserveStackTrace146 }147 }148 }149 @Override150 public boolean canTakeScreenShot() {151 return getDriver() instanceof TakesScreenshot;152 }153 @Override154 public void takeScreenshot() {155 takeScreenshot(new Date().getTime() + ".png");156 }157 @Override158 public void takeScreenshot(String fileName) {159 if (!canTakeScreenShot()) {160 throw new WebDriverException("Current browser doesn't allow taking screenshot.");161 }162 byte[] screenshot = prepareScreenshot();163 persistScreenshot(fileName, screenshot);164 }165 private void persistScreenshot(String fileName, byte[] screenshot) {166 try {167 File destFile;168 if (configuration.getScreenshotPath() == null) {169 destFile = new File(fileName);170 } else {171 destFile = Paths.get(configuration.getScreenshotPath(), fileName).toFile();172 }173 FileUtils.writeByteArrayToFile(destFile, screenshot);174 } catch (IOException e) {175 throw new RuntimeException("Error when taking the screenshot", e);176 }177 }178 private byte[] prepareScreenshot() {179 byte[] screenshot;180 try {181 screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);182 } catch (UnhandledAlertException uae) {183 ImageUtils imageUtils = new ImageUtils(getDriver());184 screenshot = imageUtils.handleAlertAndTakeScreenshot();185 }186 return screenshot;187 }188 @Override189 public WebDriver getDriver() {190 return driver;191 }192 private Search getSearch() {193 return search;194 }195 @Override196 public EventsRegistry events() {197 if (events == null) {198 throw new IllegalStateException("An EventFiringWebDriver instance is required to use events. "199 + "You should set 'eventsEnabled' configuration property to 'true' "200 + "or override newWebDriver() to build an EventFiringWebDriver.");201 }202 return events;203 }204 @Override205 public MouseActions mouse() {206 return mouseActions;207 }208 @Override209 public KeyboardActions keyboard() {210 return keyboardActions;211 }212 @Override213 public WindowAction window() {214 return windowAction;215 }216 @Override217 public FluentWait await() {218 FluentWait fluentWait = new FluentWait(this);219 Long atMost = configuration.getAwaitAtMost();220 if (atMost != null) {221 fluentWait.atMost(atMost);222 }223 Long pollingEvery = configuration.getAwaitPollingEvery();224 if (pollingEvery != null) {225 fluentWait.pollingEvery(pollingEvery);226 }227 return fluentWait;228 }229 @Override230 public Set<Cookie> getCookies() {231 return getDriver().manage().getCookies();232 }233 @Override234 public Cookie getCookie(String name) {235 return getDriver().manage().getCookieNamed(name);236 }237 private String buildUrl(String url) {238 String currentUrl = getDriver().getCurrentUrl();239 String baseUrl = UrlUtils.sanitizeBaseUrl(getBaseUrl(), currentUrl);240 return UrlUtils.concat(baseUrl, url);241 }242 @Override243 public String url() {244 String baseUrl = buildUrl(null);245 String currentUrl = getDriver().getCurrentUrl();246 if (currentUrl != null && baseUrl != null && currentUrl.startsWith(baseUrl)) {247 currentUrl = currentUrl.substring(baseUrl.length());248 }249 return currentUrl;250 }251 @Override252 public String pageSource() {253 return getDriver().getPageSource();254 }255 @Override256 public <P extends FluentPage> P goTo(P page) {257 if (page == null) {258 throw new IllegalArgumentException("Page is mandatory");259 }260 page.go();261 return page;262 }263 @Override264 public void goTo(String url) {265 if (url == null) {266 throw new IllegalArgumentException("Url is mandatory");267 }268 getDriver().get(buildUrl(url));269 }270 @Override271 public void goToInNewTab(String url) {272 if (url == null) {273 throw new IllegalArgumentException("Url is mandatory");274 }275 String newTab;276 synchronized (getClass()) {277 Set<String> initialTabs = getDriver().getWindowHandles();278 executeScript("window.open('" + buildUrl(url) + "', '_blank');");279 Set<String> tabs = getDriver().getWindowHandles();280 tabs.removeAll(initialTabs);281 newTab = tabs.iterator().next();282 }283 getDriver().switchTo().window(newTab);284 }285 @Override286 public Capabilities capabilities() {287 WebDriver currentDriver = getDriver();288 Capabilities capabilities = currentDriver instanceof HasCapabilities289 ? ((HasCapabilities) currentDriver).getCapabilities()290 : null;291 while (currentDriver instanceof WrapsDriver && capabilities == null) {292 currentDriver = ((WrapsDriver) currentDriver).getWrappedDriver();293 capabilities = currentDriver instanceof HasCapabilities ? ((HasCapabilities) currentDriver).getCapabilities() : null;294 }295 return capabilities;296 }297 @Override298 public FluentJavascript executeScript(String script, Object... args) {299 return new FluentJavascript((JavascriptExecutor) getDriver(), false, script, args);300 }301 @Override302 public FluentJavascript executeAsyncScript(String script, Object... args) {303 return new FluentJavascript((JavascriptExecutor) getDriver(), true, script, args);304 }305 @Override306 public FluentList<FluentWebElement> find(String selector, SearchFilter... filters) {307 return getSearch().find(selector, filters);308 }309 @Override310 public FluentList<FluentWebElement> find(By locator, SearchFilter... filters) {311 return getSearch().find(locator, filters);312 }313 @Override314 public FluentList<FluentWebElement> find(SearchFilter... filters) {315 return getSearch().find(filters);316 }317 @Override318 public FluentList<FluentWebElement> find(List<WebElement> rawElements) {319 return getSearch().find(rawElements);320 }321 @Override322 public FluentList<FluentWebElement> $(List<WebElement> rawElements) {323 return getSearch().$(rawElements);324 }325 @Override326 public FluentWebElement el(WebElement rawElement) {327 return getSearch().el(rawElement);328 }329 @Override330 public void switchTo(FluentList<? extends FluentWebElement> elements) {331 switchTo(elements.first());332 }333 @Override334 public void switchTo(FluentWebElement element) {335 if (null == element || !"iframe".equals(element.tagName())) {336 getDriver().switchTo().defaultContent();337 } else {338 WebElement target = element.getElement();339 while (target instanceof WrapsElement && target != ((WrapsElement) target).getWrappedElement()) {340 target = ((WrapsElement) target).getWrappedElement();341 }342 getDriver().switchTo().frame(target);343 }344 }345 @Override346 public void switchTo() {347 switchTo((FluentWebElement) null);348 }349 @Override350 public void switchToDefault() {351 switchTo((FluentWebElement) null);352 }353 @Override354 public Alert alert() {355 return new AlertImpl(getDriver());356 }357 /**358 * Quit the underlying web driver and release fluent driver resources.359 */360 public void quit() {361 if (getDriver() != null) {362 getDriver().quit();363 }364 releaseFluent();365 }366 /**367 * Release fluent driver resources.368 */369 public void releaseFluent() {370 fluentInjector.release();371 if (componentsEventsRegistry != null) {372 componentsEventsRegistry.close();373 }374 }375 @Override376 public <L extends List<T>, T> L newComponentList(Class<L> listClass, Class<T> componentClass) {...

Full Screen

Full Screen

Source:ImageUtils.java Github

copy

Full Screen

...20 private final WebDriver driver;21 public ImageUtils(WebDriver driver) {22 this.driver = driver;23 }24 public WebDriver getDriver() {25 return driver;26 }27 public byte[] handleAlertAndTakeScreenshot() {28 String alertText = getDriver().switchTo().alert().getText();29 getDriver().switchTo().alert().accept();30 File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);31 try {32 BufferedImage screenshotImage = ImageIO.read(scrFile);33 BufferedImage alertImage = generateAlertImageWithLogo(alertText, screenshotImage.getWidth());34 FileUtils.deleteQuietly(scrFile);35 return toByteArray(stitchImages(screenshotImage, alertImage, false));36 } catch (IOException e) {37 throw new RuntimeException("Error while reading screenshot file.", e);38 }39 }40 public static BufferedImage toBufferedImage(String fileName) throws FileNotFoundException {41 InputStream is = new FileInputStream(new File(fileName));42 try {43 BufferedImage image = ImageIO.read(is);...

Full Screen

Full Screen

getDriver

Using AI Code Generation

copy

Full Screen

1package org.fluentlenium.utils;2import java.awt.image.BufferedImage;3import java.io.File;4import java.io.IOException;5import javax.imageio.ImageIO;6import org.openqa.selenium.OutputType;7import org.openqa.selenium.TakesScreenshot;8import org.openqa.selenium.WebDriver;9import org.openqa.selenium.WebElement;10public class ImageUtils {11 public static BufferedImage getDriver(WebDriver driver) {12 return getImage(driver.getScreenshotAs(OutputType.FILE));13 }14 public static BufferedImage getImage(File file) {15 try {16 return ImageIO.read(file);17 } catch (IOException e) {18 throw new IllegalArgumentException("Unable to read image from file " + file.getAbsolutePath(), e);19 }20 }21 public static BufferedImage getElement(WebElement element) {22 return getImage(((TakesScreenshot) element).getScreenshotAs(OutputType.FILE));23 }24}25package org.fluentlenium.utils;26import java.awt.image.BufferedImage;27import java.io.File;28import java.io.IOException;29import javax.imageio.ImageIO;30import org.openqa.selenium.OutputType;31import org.openqa.selenium.TakesScreenshot;32import org.openqa.selenium.WebDriver;33import org.openqa.selenium.WebElement;34public class ImageUtils {35 public static BufferedImage getDriver(WebDriver driver) {36 return getImage(driver.getScreenshotAs(OutputType.FILE));37 }38 public static BufferedImage getImage(File file) {39 try {40 return ImageIO.read(file);41 } catch (IOException e) {42 throw new IllegalArgumentException("Unable to read image from file " + file.getAbsolutePath(), e);43 }44 }45 public static BufferedImage getElement(WebElement element) {46 return getImage(((TakesScreenshot) element).getScreenshotAs(OutputType.FILE));47 }48}49package org.fluentlenium.utils;50import java.awt.image.BufferedImage;51import java.io.File;52import java.io.IOException;53import javax.imageio.ImageIO;54import org.openqa.selenium.OutputType;55import org.openqa.selenium.TakesScreenshot;56import org.openqa.selenium.WebDriver;57import org.openqa.selenium.WebElement;58public class ImageUtils {59 public static BufferedImage getDriver(WebDriver driver) {60 return getImage(driver.getScreenshotAs(OutputType.FILE));61 }62 public static BufferedImage getImage(File file) {63 try {64 return ImageIO.read(file);65 } catch (IOException e) {

Full Screen

Full Screen

getDriver

Using AI Code Generation

copy

Full Screen

1package org.fluentlenium.utils;2import org.fluentlenium.core.FluentDriver;3import org.fluentlenium.core.FluentPage;4import org.fluentlenium.core.annotation.Page;5import org.fluentlenium.core.hook.wait.Wait;6import org.openqa.selenium.WebDriver;7public class GetDriver extends FluentPage {8 private FluentPage page;9 public GetDriver(WebDriver driver) {10 super(driver);11 }12 public FluentDriver getDriver() {13 return super.getDriver();14 }15 public FluentDriver getDriver(FluentDriver driver) {16 return super.getDriver(driver);17 }18 public FluentDriver getDriver(FluentPage page) {19 return super.getDriver(page);20 }21}22package org.fluentlenium.utils;23import org.fluentlenium.core.FluentDriver;24import org.fluentlenium.core.FluentPage;25import org.fluentlenium.core.annotation.Page;26import org.fluentlenium.core.hook.wait.Wait;27import org.openqa.selenium.WebDriver;28public class GetDriver extends FluentPage {29 private FluentPage page;30 public GetDriver(WebDriver driver) {31 super(driver);32 }33 public FluentDriver getDriver() {34 return super.getDriver();35 }36 public FluentDriver getDriver(FluentDriver driver) {37 return super.getDriver(driver);38 }39 public FluentDriver getDriver(FluentPage page) {40 return super.getDriver(page);41 }42}43package org.fluentlenium.utils;44import org.fluentlenium.core.FluentDriver;45import org.fluentlenium.core.FluentPage;46import org.fluentlenium.core.annotation.Page;47import org.fluentlenium.core.hook.wait.Wait;48import org.openqa.selenium.WebDriver;49public class GetDriver extends FluentPage {50 private FluentPage page;51 public GetDriver(WebDriver driver) {52 super(driver);53 }54 public FluentDriver getDriver() {55 return super.getDriver();56 }57 public FluentDriver getDriver(FluentDriver driver) {58 return super.getDriver(driver);59 }60 public FluentDriver getDriver(FluentPage page) {61 return super.getDriver(page);62 }63}64package org.fluentlenium.utils;65import org.fluentlenium.core.FluentDriver;66import org

Full Screen

Full Screen

getDriver

Using AI Code Generation

copy

Full Screen

1package org.fluentlenium.utils;2import org.openqa.selenium.WebDriver;3import org.openqa.selenium.firefox.FirefoxDriver;4public class ImageUtilsTest {5 public static void main(String[] args) {6 WebDriver driver = new FirefoxDriver();7 ImageUtils imageUtils = new ImageUtils(driver);8 imageUtils.getDriver();9 driver.quit();10 }11}

Full Screen

Full Screen

getDriver

Using AI Code Generation

copy

Full Screen

1public class ImageUtilsGetDriver {2 public static void main(String[] args) {3 WebDriver driver = new FirefoxDriver();4 ImageUtils imageUtils = new ImageUtils(driver);5 WebDriver driver1 = imageUtils.getDriver();6 System.out.println(driver1);7 }8}

Full Screen

Full Screen

getDriver

Using AI Code Generation

copy

Full Screen

1import org.fluentlenium.utils.ImageUtils;2import org.openqa.selenium.WebDriver;3import org.openqa.selenium.firefox.FirefoxDriver;4public class ImageUtilsTest {5 public static void main(String[] args) {6 WebDriver driver = new FirefoxDriver();7 ImageUtils imageUtils = new ImageUtils();8 imageUtils.getDriver(driver);9 }10}11import org.fluentlenium.utils.ImageUtils;12import org.openqa.selenium.WebDriver;13import org.openqa.selenium.firefox.FirefoxDriver;14public class ImageUtilsTest {15 public static void main(String[] args) {16 WebDriver driver = new FirefoxDriver();17 ImageUtils imageUtils = new ImageUtils();18 imageUtils.getDriver(driver);19 }20}21import org.fluentlenium.utils.ImageUtils;22import org.openqa.selenium.WebDriver;23import org.openqa.selenium.firefox.FirefoxDriver;24public class ImageUtilsTest {25 public static void main(String[] args) {26 WebDriver driver = new FirefoxDriver();27 ImageUtils imageUtils = new ImageUtils();28 imageUtils.getDriver(driver);29 }30}31import org.fluentlenium.utils.ImageUtils;32import org.openqa.selenium.WebDriver;33import org.openqa.selenium.firefox.FirefoxDriver;34public class ImageUtilsTest {35 public static void main(String[] args) {36 WebDriver driver = new FirefoxDriver();37 ImageUtils imageUtils = new ImageUtils();38 imageUtils.getDriver(driver);39 }40}41import org.fluentlenium.utils.ImageUtils;42import org.openqa.selenium.WebDriver;43import org.openqa.selenium.firefox.FirefoxDriver;44public class ImageUtilsTest {45 public static void main(String[] args) {46 WebDriver driver = new FirefoxDriver();47 ImageUtils imageUtils = new ImageUtils();48 imageUtils.getDriver(driver);49 }50}51import org.fluentlenium.utils.ImageUtils;52import org.openqa.selenium.WebDriver;53import org.openqa.selenium.firefox.Fire

Full Screen

Full Screen

getDriver

Using AI Code Generation

copy

Full Screen

1package org.fluentlenium.utils;2import org.openqa.selenium.WebDriver;3public class ImageUtils {4 public static WebDriver getDriver() {5 return null;6 }7}8package org.fluentlenium.utils;9import org.openqa.selenium.WebDriver;10public class ImageUtils {11 public static WebDriver getDriver() {12 return null;13 }14}15package org.fluentlenium.utils;16import org.openqa.selenium.WebDriver;17public class ImageUtils {18 public static WebDriver getDriver() {19 return null;20 }21}22package org.fluentlenium.utils;23import org.openqa.selenium.WebDriver;24public class ImageUtils {25 public static WebDriver getDriver() {26 return null;27 }28}29package org.fluentlenium.utils;30import org.openqa.selenium.WebDriver;31public class ImageUtils {32 public static WebDriver getDriver() {33 return null;34 }35}36package org.fluentlenium.utils;37import org.openqa.selenium.WebDriver;38public class ImageUtils {39 public static WebDriver getDriver() {40 return null;41 }42}43package org.fluentlenium.utils;44import org.openqa.selenium.WebDriver;45public class ImageUtils {46 public static WebDriver getDriver() {47 return null;48 }49}50package org.fluentlenium.utils;51import org.openqa.selenium.WebDriver;52public class ImageUtils {53 public static WebDriver getDriver() {54 return null;55 }56}57package org.fluentlenium.utils;58import org.openqa.selenium.WebDriver;59public class ImageUtils {60 public static WebDriver getDriver()

Full Screen

Full Screen

getDriver

Using AI Code Generation

copy

Full Screen

1package org.fluentlenium.utils;2import org.fluentlenium.core.FluentDriver;3import org.openqa.selenium.WebDriver;4import org.openqa.selenium.WebDriverException;5import org.openqa.selenium.firefox.FirefoxDriver;6import org.openqa.selenium.firefox.FirefoxProfile;7import org.openqa.selenium.remote.DesiredCapabilities;8import org.openqa.selenium.remote.RemoteWebDriver;9import org.openqa.selenium.support.events.EventFiringWebDriver;10import java.net.MalformedURLException;11import java.net.URL;12import java.util.concurrent.TimeUnit;13import static org.fluentlenium.core.filter.FilterConstructor.withId;14import static org.fluentlenium.core.filter.FilterConstructor.withText;15import static org.fluentlenium.core.filter.FilterConstructor.withValue;16import static org.fluentlenium.core.filter.MatcherConstructor.contains;17import static org.fluentlenium.core.filter.MatcherConstructor.endsWith;18import static org.fluentlenium.core.filter.MatcherConstructor.startsWith;19public class ImageUtils {20 private ImageUtils() {21 }22 public static WebDriver getDriver() {23 return FluentDriver.getDriver();24 }25 public static WebDriver getDriver(String driverClassName) {26 return FluentDriver.getDriver(driverClassName);27 }28 public static WebDriver getDriver(String driverClassName, String driverPath) {29 return FluentDriver.getDriver(driverClassName, driverPath);30 }31 public static WebDriver getDriver(String driverClassName, String driverPath, DesiredCapabilities desiredCapabilities) {32 return FluentDriver.getDriver(driverClassName, driverPath, desiredCapabilities);33 }34 public static WebDriver getDriver(String driverClassName, DesiredCapabilities desiredCapabilities) {35 return FluentDriver.getDriver(driverClassName, desiredCapabilities);36 }37 public static WebDriver getDriver(DesiredCapabilities desiredCapabilities) {38 return FluentDriver.getDriver(desiredCapabilities);39 }40 public static WebDriver getDriver(String driverClassName, String driverPath, DesiredCapabilities desiredCapabilities, FirefoxProfile firefoxProfile) {41 return FluentDriver.getDriver(driverClassName, driverPath, desiredCapabilities, firefoxProfile);42 }43 public static WebDriver getDriver(String driverClassName, DesiredCapabilities desiredCapabilities, FirefoxProfile firefoxProfile) {44 return FluentDriver.getDriver(driverClassName, desiredCapabilities, firefoxProfile);45 }46 public static WebDriver getDriver(DesiredCapabilities desiredCapabilities, FirefoxProfile firefoxProfile) {47 return FluentDriver.getDriver(desiredCapabilities, firefoxProfile);48 }49 public static WebDriver getDriver(String driverClassName, String driverPath, DesiredCapabilities desiredCapabilities, FirefoxProfile firefoxProfile

Full Screen

Full Screen

getDriver

Using AI Code Generation

copy

Full Screen

1package com.fluentlenium.tutorial;2import org.fluentlenium.adapter.FluentTest;3import org.junit.Test;4import org.openqa.selenium.WebDriver;5import static org.assertj.core.api.Assertions.assertThat;6public class ImageUtilsTest extends FluentTest {7 public void testImageUtils() {8 WebDriver driver = getDriver();9 assertThat(driver).isNotNull();10 }11}12package com.fluentlenium.tutorial;13import org.fluentlenium.adapter.FluentTest;14import org.junit.Test;15import org.openqa.selenium.WebDriver;16import static org.assertj.core.api.Assertions.assertThat;17public class ImageUtilsTest extends FluentTest {18 public void testImageUtils() {19 WebDriver driver = getDriver();20 assertThat(driver).isNotNull();21 }22}23package com.fluentlenium.tutorial;24import org.fluentlenium.adapter.FluentTest;25import org.junit.Test;26import org.openqa.selenium.WebDriver;27import static org.assertj.core.api.Assertions.assertThat;28public class ImageUtilsTest extends FluentTest {29 public void testImageUtils() {30 WebDriver driver = getDriver();31 assertThat(driver).isNotNull();32 }33}34package com.fluentlenium.tutorial;35import org.fluentlenium.adapter.FluentTest;36import org.junit.Test;37import org.openqa.selenium.WebDriver;38import static org.assertj.core.api.Assertions.assertThat;39public class ImageUtilsTest extends FluentTest {40 public void testImageUtils() {41 WebDriver driver = getDriver();42 assertThat(driver).isNotNull();43 }44}45package com.fluentlenium.tutorial;46import org.fluentlenium.adapter.FluentTest;47import org.junit.Test;48import org.openqa.selenium.WebDriver;49import static org.assertj.core.api.Assertions.assertThat;50public class ImageUtilsTest extends FluentTest {51 public void testImageUtils() {52 WebDriver driver = getDriver();53 assertThat(driver).isNotNull();54 }55}

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run FluentLenium automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful