用了 AppiumDriver 后,WebDriverWait 中无法使用 AppiumDriver 特有的方法

用了AppiumDriver后,WebDriverWait中无法使用AppiumDriver特有的方法,比如findElementsByAndroidUIAutomator等。这是由于
WebDriverWait继承与FluentWait<WebDriver>,而WebDriver接口是没有定义findElementsByAndroidUIAutomator的,所以如果想用类似WebDriverWait的功能,就必须做些封装。

<span class="kn">package</span> <span class="n">com</span><span class="o">.</span><span class="na">merlini</span><span class="o">.</span><span class="na">app</span><span class="o">.</span><span class="na">common</span><span class="o">;</span>

<span class="kn">import</span> <span class="nn">io.appium.java_client.AppiumDriver</span><span class="o">;</span>

<span class="kn">import</span> <span class="nn">java.util.concurrent.TimeUnit</span><span class="o">;</span>

<span class="kn">import</span> <span class="nn">org.openqa.selenium.NotFoundException</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.openqa.selenium.support.ui.Clock</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.openqa.selenium.support.ui.FluentWait</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.openqa.selenium.support.ui.Sleeper</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.openqa.selenium.support.ui.SystemClock</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.openqa.selenium.support.ui.WebDriverWait</span><span class="o">;</span>

<span class="kn">import</span> <span class="nn">com.merlini.common.Config</span><span class="o">;</span>


<span class="kd">public</span> <span class="kd">class</span> <span class="nc">AppiumDriverWait</span> <span class="kd">extends</span> <span class="n">FluentWait</span><span class="o"><</span><span class="n">AppiumDriver</span><span class="o">>{</span>
    <span class="c1">//默认轮询时间(毫秒)</span>
    <span class="kd">public</span> <span class="kd">final</span> <span class="kd">static</span> <span class="kt">long</span> <span class="n">DEFAULT_POLLINGEVERY_TIMEMILLS</span> <span class="o">=</span> <span class="n">Integer</span><span class="o">.</span><span class="na">parseInt</span><span class="o">(</span><span class="n">Config</span><span class="o">.</span><span class="na">getConfBykey</span><span class="o">(</span><span class="s">"wait.sleepInMillis"</span><span class="o">));</span>
    <span class="kd">public</span> <span class="kd">final</span> <span class="kd">static</span> <span class="kt">long</span> <span class="n">DEFAULT_TIMEOUT_INSECONDS</span> <span class="o">=</span> <span class="n">Integer</span><span class="o">.</span><span class="na">parseInt</span><span class="o">(</span><span class="n">Config</span><span class="o">.</span><span class="na">getConfBykey</span><span class="o">(</span><span class="s">"wait.TimeOutInSeconds"</span><span class="o">));</span>
    <span class="cm">/**
       * Wait will ignore instances of NotFoundException that are encountered (thrown) by default in
       * the 'until' condition, and immediately propagate all others.  You can add more to the ignore
       * list by calling ignoring(exceptions to add).
       *
       * @param driver The AppiumDriver instance to pass to the expected conditions
       * @see WebDriverWait#ignoring(java.lang.Class)
       */</span>
    <span class="kd">public</span> <span class="n">AppiumDriverWait</span><span class="o">(</span><span class="n">AppiumDriver</span> <span class="n">driver</span><span class="o">)</span> <span class="o">{</span>
        <span class="k">this</span><span class="o">(</span><span class="n">driver</span><span class="o">,</span> <span class="k">new</span> <span class="n">SystemClock</span><span class="o">(),</span> <span class="n">Sleeper</span><span class="o">.</span><span class="na">SYSTEM_SLEEPER</span><span class="o">,</span> <span class="n">DEFAULT_TIMEOUT_INSECONDS</span><span class="o">,</span> <span class="n">DEFAULT_POLLINGEVERY_TIMEMILLS</span><span class="o">);</span>
    <span class="o">}</span>
    <span class="cm">/**
       * Wait will ignore instances of NotFoundException that are encountered (thrown) by default in
       * the 'until' condition, and immediately propagate all others.  You can add more to the ignore
       * list by calling ignoring(exceptions to add).
       *
       * @param driver The AppiumDriver instance to pass to the expected conditions
       * @param timeOutInSeconds The timeout in seconds when an expectation is called
       * @see WebDriverWait#ignoring(java.lang.Class)
       */</span>
    <span class="kd">public</span> <span class="n">AppiumDriverWait</span><span class="o">(</span><span class="n">AppiumDriver</span> <span class="n">driver</span><span class="o">,</span> <span class="kt">long</span> <span class="n">timeOutInSeconds</span><span class="o">)</span> <span class="o">{</span>
        <span class="k">this</span><span class="o">(</span><span class="n">driver</span><span class="o">,</span> <span class="k">new</span> <span class="n">SystemClock</span><span class="o">(),</span> <span class="n">Sleeper</span><span class="o">.</span><span class="na">SYSTEM_SLEEPER</span><span class="o">,</span> <span class="n">timeOutInSeconds</span><span class="o">,</span> <span class="n">DEFAULT_POLLINGEVERY_TIMEMILLS</span><span class="o">);</span>
    <span class="o">}</span>
    <span class="cm">/**
       * Wait will ignore instances of NotFoundException that are encountered (thrown) by default in
       * the 'until' condition, and immediately propagate all others.  You can add more to the ignore
       * list by calling ignoring(exceptions to add).
       *
       * @param driver The WebDriver instance to pass to the expected conditions
       * @param timeOutInSeconds The timeout in seconds when an expectation is called
       * @param sleepInMillis The duration in milliseconds to sleep between polls.
       * @see WebDriverWait#ignoring(java.lang.Class)
       */</span>
    <span class="kd">public</span> <span class="n">AppiumDriverWait</span><span class="o">(</span><span class="n">AppiumDriver</span> <span class="n">driver</span><span class="o">,</span> <span class="kt">long</span> <span class="n">timeOutInSeconds</span><span class="o">,</span> <span class="kt">long</span> <span class="n">sleepInMillis</span><span class="o">)</span> <span class="o">{</span>
        <span class="k">this</span><span class="o">(</span><span class="n">driver</span><span class="o">,</span> <span class="k">new</span> <span class="n">SystemClock</span><span class="o">(),</span> <span class="n">Sleeper</span><span class="o">.</span><span class="na">SYSTEM_SLEEPER</span><span class="o">,</span> <span class="n">timeOutInSeconds</span><span class="o">,</span> <span class="n">sleepInMillis</span><span class="o">);</span>
      <span class="o">}</span>
    <span class="kd">protected</span> <span class="n">AppiumDriverWait</span><span class="o">(</span><span class="n">AppiumDriver</span> <span class="n">driver</span><span class="o">,</span> <span class="n">Clock</span> <span class="n">clock</span><span class="o">,</span> <span class="n">Sleeper</span> <span class="n">sleeper</span><span class="o">,</span> <span class="kt">long</span> <span class="n">timeOutInSeconds</span><span class="o">,</span>
          <span class="kt">long</span> <span class="n">sleepTimeOut</span><span class="o">)</span> <span class="o">{</span>
        <span class="kd">super</span><span class="o">(</span><span class="n">driver</span><span class="o">,</span> <span class="n">clock</span><span class="o">,</span> <span class="n">sleeper</span><span class="o">);</span>
        <span class="n">withTimeout</span><span class="o">(</span><span class="n">timeOutInSeconds</span><span class="o">,</span> <span class="n">TimeUnit</span><span class="o">.</span><span class="na">SECONDS</span><span class="o">);</span>
        <span class="n">pollingEvery</span><span class="o">(</span><span class="n">sleepTimeOut</span><span class="o">,</span> <span class="n">TimeUnit</span><span class="o">.</span><span class="na">MILLISECONDS</span><span class="o">);</span>
        <span class="n">ignoring</span><span class="o">(</span><span class="n">NotFoundException</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
    <span class="o">}</span>


<span class="o">}</span>


<span class="kn">package</span> <span class="n">com</span><span class="o">.</span><span class="na">merlini</span><span class="o">.</span><span class="na">app</span><span class="o">.</span><span class="na">common</span><span class="o">;</span>

<span class="kn">import</span> <span class="nn">io.appium.java_client.AppiumDriver</span><span class="o">;</span>

<span class="kn">import</span> <span class="nn">com.google.common.base.Function</span><span class="o">;</span>

<span class="kd">public</span> <span class="kt">int</span><span class="n">erface</span> <span class="n">AppiumExpectedCondition</span><span class="o"><</span><span class="n">T</span><span class="o">></span> <span class="kd">extends</span> <span class="n">Function</span><span class="o"><</span><span class="n">AppiumDriver</span><span class="o">,</span><span class="n">T</span><span class="o">>{</span>

<span class="o">}</span>

这样就可以 AppiumDriverWait 代替WebDriverWait
如:

<span class="cm">/**
     * 根据控件description抓取批量元素
     * @param elementType
     * @param desc
     * @return
     */</span>
    <span class="kd">public</span> <span class="n">List</span><span class="o"><</span><span class="n">WebElement</span><span class="o">></span> <span class="n">findElementsByDescription</span><span class="o">(</span><span class="kd">final</span> <span class="n">String</span> <span class="n">elementType</span><span class="o">,</span><span class="kd">final</span> <span class="n">String</span> <span class="n">desc</span><span class="o">){</span>
        <span class="n">AppiumDriverWait</span> <span class="n">wait</span><span class="o">=</span><span class="k">new</span> <span class="n">AppiumDriverWait</span><span class="o">(</span><span class="n">driver</span><span class="o">);</span>
        <span class="n">List</span><span class="o"><</span><span class="n">WebElement</span><span class="o">></span> <span class="n">ele</span><span class="o">=</span> <span class="n">wait</span><span class="o">.</span><span class="na">until</span><span class="o">(</span> <span class="k">new</span> <span class="n">AppiumExpectedCondition</span><span class="o"><</span><span class="n">List</span><span class="o"><</span><span class="n">WebElement</span><span class="o">>>(){</span>
            <span class="kd">public</span> <span class="n">List</span><span class="o"><</span><span class="n">WebElement</span><span class="o">></span> <span class="n">apply</span><span class="o">(</span><span class="n">AppiumDriver</span> <span class="n">driver</span><span class="o">){</span>
                <span class="k">return</span> <span class="n">driver</span><span class="o">.</span><span class="na">findElementsByAndroidUIAutomator</span><span class="o">(</span><span class="s">"new UiSelector().className(\"android.widget."</span><span class="o">+</span><span class="n">elementType</span><span class="o">+</span><span class="s">"\").description(\""</span><span class="o">+</span><span class="n">desc</span><span class="o">+</span><span class="s">"\")"</span><span class="o">);</span>
            <span class="o">}</span>
        <span class="o">});</span>
        <span class="k">return</span> <span class="n">ele</span><span class="o">;</span><span class="c1">//driver.findElementsByAndroidUIAutomator("new UiSelector().className(\"android.widget."+elementType+"\").description(\""+desc+"\")"); </span>
    <span class="o">}</span>
本帖已被设为精华帖!
共收到  8 条回复
1楼 已删除.
155
532589730  2楼 · 5月前  1 人喜欢

apply中使用By可能可以解决,不要直接使用WebDriver/AppiumDriver

1185
kuroky  3楼 · 5月前  1 人喜欢

没有By.AndroidUIAutomator的,难道BY有针对AppiumDriver的封装?

403574cd2a42e73c9f34b2b14e2bf9b4
qddegtya  4楼 · 5月前  喜欢

#3楼 @kuroky

之前我在源码剖析帖里就有提及
mobileby类扩展了之前的By类。

<span class="c">#!/usr/bin/env python</span>

<span class="c"># Licensed under the Apache License, Version 2.0 (the "License");</span>
<span class="c"># you may not use this file except in compliance with the License.</span>
<span class="c"># You may obtain a copy of the License at</span>
<span class="c">#</span>
<span class="c">#     http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="c">#</span>
<span class="c"># Unless required by applicable law or agreed to in writing, software</span>
<span class="c"># distributed under the License is distributed on an "AS IS" BASIS,</span>
<span class="c"># WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
<span class="c"># See the License for the specific language governing permissions and</span>
<span class="c"># limitations under the License.</span>

<span class="kn">from</span> <span class="nn">selenium.webdriver.common.by</span> <span class="kn">import</span> <span class="n">By</span>


<span class="k">class</span> <span class="nc">MobileBy</span><span class="p">(</span><span class="n">By</span><span class="p">):</span>
    <span class="n">IOS_UIAUTOMATION</span> <span class="o">=</span> <span class="s">'-ios uiautomation'</span>
    <span class="n">ANDROID_UIAUTOMATOR</span> <span class="o">=</span> <span class="s">'-android uiautomator'</span>
    <span class="n">ACCESSIBILITY_ID</span> <span class="o">=</span> <span class="s">'accessibility id'</span>
1185
kuroky  5楼 · 5月前  喜欢

试试看这个靠不靠普 ,啥时候加到加到接口里面就好了 ,还有那个mobileElement 用起来相当不便

403574cd2a42e73c9f34b2b14e2bf9b4
qddegtya  6楼 · 5月前  喜欢

#5楼 @kuroky

拿expected_conditions中的presence_of_element_located举例来说
webdriver.support中的expected_conditions中定义的该可调用类中直接调用的就是核心的find_element方法
而AppiumDriver定义的那些Find方法调用的正是这个核心方法,只不过他扩展了By类,所以,这边是可以通过访问MobileBy的相关属性来实现smartwait的

<span class="k">class</span> <span class="nc">presence_of_all_elements_located</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
    <span class="s">""" An expectation for checking that there is at least one element present
    on a web page.
    locator is used to find the element
    returns the list of WebElements once they are located
    """</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">locator</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">locator</span> <span class="o">=</span> <span class="n">locator</span>

    <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">driver</span><span class="p">):</span>
        <span class="k">return</span> <span class="n">_find_elements</span><span class="p">(</span><span class="n">driver</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">locator</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_find_elements</span><span class="p">(</span><span class="n">driver</span><span class="p">,</span> <span class="n">by</span><span class="p">):</span>
    <span class="k">try</span> <span class="p">:</span>
        <span class="k">return</span> <span class="n">driver</span><span class="o">.</span><span class="n">find_elements</span><span class="p">(</span><span class="o">*</span><span class="n">by</span><span class="p">)</span>
    <span class="k">except</span> <span class="n">WebDriverException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
        <span class="k">raise</span> <span class="n">e</span>
155
532589730  7楼 · 5月前  喜欢

#3楼 @kuroky 
有,MobileBy方法返回的就是By,可以把appiumdriver封装的accessibilityid方法拆出来。
java MobileBy源码:

<span class="kn">package</span> <span class="n">io</span><span class="o">.</span><span class="na">appium</span><span class="o">.</span><span class="na">java_client</span><span class="o">;</span>

<span class="kn">import</span> <span class="nn">org.openqa.selenium.By</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.openqa.selenium.SearchContext</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.openqa.selenium.WebElement</span><span class="o">;</span>

<span class="kn">import</span> <span class="nn">java.io.Serializable</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.util.List</span><span class="o">;</span>

<span class="cm">/**
 * Created by jonahss on 4/10/14.
 */</span>
<span class="kd">public</span> <span class="kd">abstract</span> <span class="kd">class</span> <span class="nc">MobileBy</span> <span class="kd">extends</span> <span class="n">By</span> <span class="o">{</span>

  <span class="kd">public</span> <span class="kd">static</span> <span class="n">By</span> <span class="n">IosUIAutomation</span><span class="o">(</span><span class="kd">final</span> <span class="n">String</span> <span class="n">uiautomationText</span><span class="o">)</span> <span class="o">{</span>
    <span class="k">if</span> <span class="o">(</span><span class="n">uiautomationText</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
      <span class="k">throw</span> <span class="k">new</span> <span class="n">IllegalArgumentException</span><span class="o">(</span><span class="s">"Must supply an iOS UIAutomation string"</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="k">return</span> <span class="k">new</span> <span class="n">ByIosUIAutomation</span><span class="o">(</span><span class="n">uiautomationText</span><span class="o">);</span>
  <span class="o">}</span>

  <span class="kd">public</span> <span class="kd">static</span> <span class="n">By</span> <span class="n">AndroidUIAutomator</span><span class="o">(</span><span class="kd">final</span> <span class="n">String</span> <span class="n">uiautomatorText</span><span class="o">)</span> <span class="o">{</span>
    <span class="k">if</span> <span class="o">(</span><span class="n">uiautomatorText</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
      <span class="k">throw</span> <span class="k">new</span> <span class="n">IllegalArgumentException</span><span class="o">(</span><span class="s">"Must supply an Android UIAutomator string"</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="k">return</span> <span class="k">new</span> <span class="n">ByAndroidUIAutomator</span><span class="o">(</span><span class="n">uiautomatorText</span><span class="o">);</span>
  <span class="o">}</span>

  <span class="kd">public</span> <span class="kd">static</span> <span class="n">By</span> <span class="n">AccessibilityId</span><span class="o">(</span><span class="kd">final</span> <span class="n">String</span> <span class="n">id</span><span class="o">)</span> <span class="o">{</span>
    <span class="k">if</span> <span class="o">(</span><span class="n">id</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
      <span class="k">throw</span> <span class="k">new</span> <span class="n">IllegalArgumentException</span><span class="o">(</span><span class="s">"Must supply a uiautomationText"</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="k">return</span> <span class="k">new</span> <span class="n">ByAccessibilityId</span><span class="o">(</span><span class="n">id</span><span class="o">);</span>
  <span class="o">}</span>

  <span class="kd">public</span> <span class="kd">static</span> <span class="kd">class</span> <span class="nc">ByIosUIAutomation</span> <span class="kd">extends</span> <span class="n">By</span> <span class="kd">implements</span> <span class="n">Serializable</span> <span class="o">{</span>

    <span class="kd">private</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">automationText</span><span class="o">;</span>

    <span class="kd">public</span> <span class="n">ByIosUIAutomation</span><span class="o">(</span><span class="n">String</span> <span class="n">uiautomationText</span><span class="o">)</span>   <span class="o">{</span>
      <span class="n">automationText</span> <span class="o">=</span> <span class="n">uiautomationText</span><span class="o">;</span>
    <span class="o">}</span>

    <span class="nd">@Override</span>
    <span class="kd">public</span> <span class="n">List</span><span class="o"><</span><span class="n">WebElement</span><span class="o">></span> <span class="n">findElements</span><span class="o">(</span><span class="n">SearchContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span>
      <span class="k">return</span> <span class="o">((</span><span class="n">FindsByIosUIAutomation</span><span class="o">)</span> <span class="n">context</span><span class="o">).</span><span class="na">findElementsByIosUIAutomation</span><span class="o">(</span><span class="n">automationText</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Override</span>
    <span class="kd">public</span> <span class="n">WebElement</span> <span class="n">findElement</span><span class="o">(</span><span class="n">SearchContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span>
      <span class="k">return</span> <span class="o">((</span><span class="n">FindsByIosUIAutomation</span><span class="o">)</span> <span class="n">context</span><span class="o">).</span><span class="na">findElementByIosUIAutomation</span><span class="o">(</span><span class="n">automationText</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Override</span>
    <span class="kd">public</span> <span class="n">String</span> <span class="n">toString</span><span class="o">()</span> <span class="o">{</span>
      <span class="k">return</span> <span class="s">"By.IosUIAutomation: "</span> <span class="o">+</span> <span class="n">automationText</span><span class="o">;</span>
    <span class="o">}</span>
  <span class="o">}</span>

  <span class="kd">public</span> <span class="kd">static</span> <span class="kd">class</span> <span class="nc">ByAndroidUIAutomator</span> <span class="kd">extends</span> <span class="n">By</span> <span class="kd">implements</span> <span class="n">Serializable</span> <span class="o">{</span>

    <span class="kd">private</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">automatorText</span><span class="o">;</span>

    <span class="kd">public</span> <span class="n">ByAndroidUIAutomator</span><span class="o">(</span><span class="n">String</span> <span class="n">uiautomatorText</span><span class="o">)</span> <span class="o">{</span>
      <span class="n">automatorText</span> <span class="o">=</span> <span class="n">uiautomatorText</span><span class="o">;</span>
    <span class="o">}</span>

    <span class="nd">@Override</span>
    <span class="kd">public</span> <span class="n">List</span><span class="o"><</span><span class="n">WebElement</span><span class="o">></span> <span class="n">findElements</span><span class="o">(</span><span class="n">SearchContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span>
      <span class="k">return</span> <span class="o">((</span><span class="n">FindsByAndroidUIAutomator</span><span class="o">)</span> <span class="n">context</span><span class="o">).</span><span class="na">findElementsByAndroidUIAutomator</span><span class="o">(</span><span class="n">automatorText</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Override</span>
    <span class="kd">public</span> <span class="n">WebElement</span> <span class="n">findElement</span><span class="o">(</span><span class="n">SearchContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span>
      <span class="k">return</span> <span class="o">((</span><span class="n">FindsByAndroidUIAutomator</span><span class="o">)</span> <span class="n">context</span><span class="o">).</span><span class="na">findElementByAndroidUIAutomator</span><span class="o">(</span><span class="n">automatorText</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Override</span>
    <span class="kd">public</span> <span class="n">String</span> <span class="n">toString</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="s">"By.AndroidUIAutomator: "</span> <span class="o">+</span> <span class="n">automatorText</span><span class="o">;</span> <span class="o">}</span>
  <span class="o">}</span>

  <span class="kd">public</span> <span class="kd">static</span> <span class="kd">class</span> <span class="nc">ByAccessibilityId</span> <span class="kd">extends</span> <span class="n">By</span> <span class="kd">implements</span> <span class="n">Serializable</span> <span class="o">{</span>

    <span class="kd">private</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">id</span><span class="o">;</span>

    <span class="kd">public</span> <span class="n">ByAccessibilityId</span><span class="o">(</span><span class="n">String</span> <span class="n">id</span><span class="o">)</span>   <span class="o">{</span>
      <span class="k">this</span><span class="o">.</span><span class="na">id</span> <span class="o">=</span> <span class="n">id</span><span class="o">;</span>
    <span class="o">}</span>

    <span class="nd">@Override</span>
    <span class="kd">public</span> <span class="n">List</span><span class="o"><</span><span class="n">WebElement</span><span class="o">></span> <span class="n">findElements</span><span class="o">(</span><span class="n">SearchContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span>
      <span class="k">return</span> <span class="o">((</span><span class="n">FindsByAccessibilityId</span><span class="o">)</span> <span class="n">context</span><span class="o">).</span><span class="na">findElementsByAccessibilityId</span><span class="o">(</span><span class="n">id</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Override</span>
    <span class="kd">public</span> <span class="n">WebElement</span> <span class="n">findElement</span><span class="o">(</span><span class="n">SearchContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span>
      <span class="k">return</span> <span class="o">((</span><span class="n">FindsByAccessibilityId</span><span class="o">)</span> <span class="n">context</span><span class="o">).</span><span class="na">findElementByAccessibilityId</span><span class="o">(</span><span class="n">id</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Override</span>
    <span class="kd">public</span> <span class="n">String</span> <span class="n">toString</span><span class="o">()</span> <span class="o">{</span>
      <span class="k">return</span> <span class="s">"By.AccessibilityId: "</span> <span class="o">+</span> <span class="n">id</span><span class="o">;</span>
    <span class="o">}</span>
  <span class="o">}</span>
<span class="o">}</span>



6eefc951ce355f3a056acf1c45a41a96
shimazakiharuka  8楼 · 5月前  喜欢

Config.getConfBykey("wait.sleepInMillis");
这是个什么东西啊?我的编译器不认识Config.getConfBykey这个东东

1185
kuroky  9楼 · 5月前  喜欢

#8楼 @shimazakiharuka 这个是配置信息,是个是数字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值