ByXPath.java revision fc21930b0a5cc598f59c0c893274e4ce33abd235
1c134b29628280a680fdf2696480166de56074b1eKevin Jin/* 2c134b29628280a680fdf2696480166de56074b1eKevin Jin * Copyright (C) 2013 DroidDriver committers 3c134b29628280a680fdf2696480166de56074b1eKevin Jin * 4c134b29628280a680fdf2696480166de56074b1eKevin Jin * Licensed under the Apache License, Version 2.0 (the "License"); 5c134b29628280a680fdf2696480166de56074b1eKevin Jin * you may not use this file except in compliance with the License. 6c134b29628280a680fdf2696480166de56074b1eKevin Jin * You may obtain a copy of the License at 7c134b29628280a680fdf2696480166de56074b1eKevin Jin * 8c134b29628280a680fdf2696480166de56074b1eKevin Jin * http://www.apache.org/licenses/LICENSE-2.0 9c134b29628280a680fdf2696480166de56074b1eKevin Jin * 10c134b29628280a680fdf2696480166de56074b1eKevin Jin * Unless required by applicable law or agreed to in writing, software 11c134b29628280a680fdf2696480166de56074b1eKevin Jin * distributed under the License is distributed on an "AS IS" BASIS, 12c134b29628280a680fdf2696480166de56074b1eKevin Jin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c134b29628280a680fdf2696480166de56074b1eKevin Jin * See the License for the specific language governing permissions and 14c134b29628280a680fdf2696480166de56074b1eKevin Jin * limitations under the License. 15c134b29628280a680fdf2696480166de56074b1eKevin Jin */ 16c134b29628280a680fdf2696480166de56074b1eKevin Jinpackage com.google.android.droiddriver.matchers; 17c134b29628280a680fdf2696480166de56074b1eKevin Jin 18c134b29628280a680fdf2696480166de56074b1eKevin Jinimport com.google.android.droiddriver.exceptions.DroidDriverException; 19c134b29628280a680fdf2696480166de56074b1eKevin Jinimport com.google.common.base.Objects; 20c134b29628280a680fdf2696480166de56074b1eKevin Jinimport com.google.common.base.Preconditions; 21c134b29628280a680fdf2696480166de56074b1eKevin Jin 22fc21930b0a5cc598f59c0c893274e4ce33abd235Kevin Jinimport javax.xml.xpath.XPath; 23c134b29628280a680fdf2696480166de56074b1eKevin Jinimport javax.xml.xpath.XPathExpression; 24c134b29628280a680fdf2696480166de56074b1eKevin Jinimport javax.xml.xpath.XPathExpressionException; 25c134b29628280a680fdf2696480166de56074b1eKevin Jinimport javax.xml.xpath.XPathFactory; 26c134b29628280a680fdf2696480166de56074b1eKevin Jin 27fc21930b0a5cc598f59c0c893274e4ce33abd235Kevin Jin/** 28fc21930b0a5cc598f59c0c893274e4ce33abd235Kevin Jin * Find matching UiElement by XPath. 29fc21930b0a5cc598f59c0c893274e4ce33abd235Kevin Jin */ 30c134b29628280a680fdf2696480166de56074b1eKevin Jinpublic class ByXPath implements Matcher { 31fc21930b0a5cc598f59c0c893274e4ce33abd235Kevin Jin private static final XPath XPATH_COMPILER = XPathFactory.newInstance().newXPath(); 328e4d4bb6a6c2b2e4a470c0804833de2a92f154d5Kevin Jin private final String xPathString; 33c134b29628280a680fdf2696480166de56074b1eKevin Jin private final XPathExpression xPathExpression; 34c134b29628280a680fdf2696480166de56074b1eKevin Jin 358e4d4bb6a6c2b2e4a470c0804833de2a92f154d5Kevin Jin protected ByXPath(String xPathString) { 368e4d4bb6a6c2b2e4a470c0804833de2a92f154d5Kevin Jin this.xPathString = Preconditions.checkNotNull(xPathString); 37c134b29628280a680fdf2696480166de56074b1eKevin Jin try { 38fc21930b0a5cc598f59c0c893274e4ce33abd235Kevin Jin xPathExpression = XPATH_COMPILER.compile(xPathString); 39c134b29628280a680fdf2696480166de56074b1eKevin Jin } catch (XPathExpressionException e) { 40c134b29628280a680fdf2696480166de56074b1eKevin Jin throw new DroidDriverException(e); 41c134b29628280a680fdf2696480166de56074b1eKevin Jin } 42c134b29628280a680fdf2696480166de56074b1eKevin Jin } 43c134b29628280a680fdf2696480166de56074b1eKevin Jin 44c134b29628280a680fdf2696480166de56074b1eKevin Jin @Override 45c134b29628280a680fdf2696480166de56074b1eKevin Jin public String toString() { 468e4d4bb6a6c2b2e4a470c0804833de2a92f154d5Kevin Jin return Objects.toStringHelper(this).addValue(xPathString).toString(); 47c134b29628280a680fdf2696480166de56074b1eKevin Jin } 48c134b29628280a680fdf2696480166de56074b1eKevin Jin 49c134b29628280a680fdf2696480166de56074b1eKevin Jin public XPathExpression getXPathExpression() { 50c134b29628280a680fdf2696480166de56074b1eKevin Jin return xPathExpression; 51c134b29628280a680fdf2696480166de56074b1eKevin Jin } 528e4d4bb6a6c2b2e4a470c0804833de2a92f154d5Kevin Jin 538e4d4bb6a6c2b2e4a470c0804833de2a92f154d5Kevin Jin public String getXPathString() { 548e4d4bb6a6c2b2e4a470c0804833de2a92f154d5Kevin Jin return xPathString; 558e4d4bb6a6c2b2e4a470c0804833de2a92f154d5Kevin Jin } 56c134b29628280a680fdf2696480166de56074b1eKevin Jin} 57