/* Copyright 2014 Red Hat, Inc. and/or its affiliates. This file is part of darcy-webdriver. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.redhat.darcy.webdriver; import com.redhat.darcy.ui.FindableNotPresentException; import com.redhat.darcy.web.api.Alert; import com.redhat.darcy.webdriver.internal.TargetedAlert; import org.openqa.selenium.NoAlertPresentException; import java.util.function.Consumer; import java.util.function.Function; /** * Implements the darcy-web Alert interface by forwarding calls to WebDriver's * {@link org.openqa.selenium.Alert} interface. */ public class WebDriverAlert implements Alert { private final TargetedAlert alert; public WebDriverAlert(TargetedAlert alert) { this.alert = alert; } @Override public boolean isPresent() { return alert.isPresent(); } @Override public void accept() { attempt(org.openqa.selenium.Alert::accept); } @Override public void dismiss() { attempt(org.openqa.selenium.Alert::dismiss); } @Override public void sendKeys(CharSequence keysToSend) { attempt(a -> a.sendKeys(keysToSend.toString())); } @Override public String getText() { return attemptAndGet(org.openqa.selenium.Alert::getText); } private void attempt(Consumer<org.openqa.selenium.Alert> action) { try { action.accept(alert); } catch (NoAlertPresentException e) { throw new FindableNotPresentException(this, e); } } private <T> T attemptAndGet(Function<org.openqa.selenium.Alert, T> action) { try { return action.apply(alert); } catch (NoAlertPresentException e) { throw new FindableNotPresentException(this, e); } } }