/* * Copyright (C) 2013 DroidDriver committers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.appium.droiddriver; import io.appium.droiddriver.exceptions.ElementNotFoundException; import io.appium.droiddriver.exceptions.TimeoutException; import io.appium.droiddriver.finders.Finder; /** * The entry interface for using droiddriver. */ public interface DroidDriver { /** * Returns whether a matching element exists without polling. Use this if the * UI is not in the progress of updating. */ boolean has(Finder finder); /** * Returns whether a matching element appears within {@code timeoutMillis}. * Use this only if you have no way to determine the content of current page. * There are very few occasions using this is justified. For instance, you are * looking for UiElements in a scrollable view, whose content varies based on * the scroll position. Refrain from using this method in these cases: * <ul> * <li>You know one of a set of UiElements will show, but are not sure which * one. Use this instead: * * <pre> * UiElement el = driver.on(By.anyOf(finder1, finder2, ...)); * // UI is stable now, find which one is returned * if (finder1.matches(el)) ... * </pre> * * </li> * <li>You know the UiElement will appear, and want to optimize the speed by * using a smaller timeout than the default timeout. It's not worth it -- on * and checkExists return as soon as the finder is found. If it is not found, * that's a test failure and should be rare.</li> * </ul> */ boolean has(Finder finder, long timeoutMillis); /** * Returns the first {@link UiElement} found using the given finder. This * method will poll until a match is found, or the default timeout is reached. * * @param finder The matching mechanism * @return The first matching element * @throws TimeoutException If no matching elements are found within the * allowed time */ UiElement on(Finder finder); /** * Returns the first {@link UiElement} found using the given finder without * polling and without {@link #refreshUiElementTree}. This method is useful in * {@link Poller.PollingListener#onPolling}. In other situations polling is * desired, and {@link #on} is more appropriate. * * @param finder The matching mechanism * @return The first matching element * @throws ElementNotFoundException If no matching elements are found */ UiElement find(Finder finder); /** * Refreshes the UiElement tree. All methods in this interface that take a * Finder parameter call this method, unless noted otherwise. */ void refreshUiElementTree(); /** * Polls until a {@link UiElement} is found using the given finder, or the * default timeout is reached. This behaves the same as {@link #on} except * that it does not return the {@link UiElement}. * * @param finder The matching mechanism * @throws TimeoutException If matching element does not appear within the * default timeout */ void checkExists(Finder finder); /** * Polls until the {@link UiElement} found using the given finder is gone, or * the default timeout is reached. * * @param finder The matching mechanism * @throws TimeoutException If matching element is not gone within the default * timeout */ void checkGone(Finder finder); /** * Returns the {@link Poller}. */ Poller getPoller(); /** * Sets the {@link Poller}. */ void setPoller(Poller poller); /** * Returns a {@link UiDevice} for device-wide interaction. */ UiDevice getUiDevice(); /** * Dumps the UiElement tree to a file to help debug. The tree is based on the * last used root UiElement if it exists, otherwise * {@link #refreshUiElementTree} is called. * <p> * The dump may contain invisible UiElements that are not used in the finding * algorithm. * </p> * * @param path the path of file to save the tree * @return whether the dumping succeeded */ boolean dumpUiElementTree(String path); }