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