用了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楼 已删除.
532589730 2楼 · 5月前 1 人喜欢

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

kuroky 3楼 · 5月前 1 人喜欢

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

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>

kuroky 5楼 · 5月前 喜欢

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

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 presenton a web page.locator is used to find the elementreturns 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>

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>

shimazakiharuka 8楼 · 5月前 喜欢

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

kuroky 9楼 · 5月前 喜欢

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

用了 AppiumDriver 后,WebDriverWait 中无法使用 AppiumDriver 特有的方法相关推荐

  1. Kali Linux中无法使用pip的解决方法

    1 无法识别pip指令 pip是Kali Linux中用来安装和管理Python包的工具,可以把pip看成是Python软件安装的工具.有时,在Kali Linux中无法使用pip工具,显示" ...

  2. 手把手教你:jsp中无法使用My97DatePicker的解决方法

    问题:jsp中无法使用My97DatePicker 原因:1WdatePicker.js路径设置不对,2存在跨域问题 解决方法: 1 在你需要引用的jsp文件头部<head></he ...

  3. 在word中无法使用中文输入法解决方法

    word2003:word菜单-工具-选项-选择'编辑'的选项卡-不要勾选'输入法控制处于活动状态'→确定.关闭word,重新打开. word2007:word左上角office菜单-word选项-高 ...

  4. linux键盘触摸板失灵,linux 中屏幕合上后触摸板无法使用

    屏幕合上后触摸板无法使用 这是一个遗留问题,从两年前开始就一直存在.过去由于对驱动不熟悉,没有考虑驱动的问题. 现在首先判断触摸板使用的驱动是哪一个.搜集资料发现,当前系统中的触摸板驱动为 psmou ...

  5. 更新Mathtype版本后,在WORD中无法使用的解决方法

    更新Mathtype版本后,在WORD中无法使用的解决方法 我之前使用的Mathtype版本是6.9的,最近更新了7.4之后打开WORD会出现禁用宏的提示. 点击启用内容,word会直接崩溃,我想应该 ...

  6. springboot项目导入Redis依赖后在测试类中无法使用(RedisTemplate),报空指针

    问题描述: 在springboot项目导入Redis依赖后,在测试类中无法使用(RedisTemplate),报空指针 前提是都已经添加了注入注解: 添加了注解后还是会报错: 解决方法: 在启动类中加 ...

  7. mathtype运行时错误48_在office中无法使用MathType该怎么办?

    想必大家都遇到过在office中无法使用MathType的情况,那么遇到这种情况的话大家应该怎么来解决呢?首先这样的现象一般为:word或者ppt中没有mathtype选项,或者选项打开提示文件未找到 ...

  8. Python中无法使用“~”获取Ubuntu系统的用户目录

    经测试后发现:Python中无法使用"~"获取Ubuntu系统的用户目录, 测试代码如下: if os.path.isdir("~"):print(" ...

  9. 解决VS2019中.net core WPF 暂时无法使用 Designer 的临时方法

    目录 解决 VS2019 中.net core WPF 暂时无法使用 Designer 的临时方法 安装 vs 2019 professional/enterprise版本 在vs的设置里,勾选.NE ...

最新文章

  1. 仿iphone日历插件(beta)
  2. 超级签名源码_苹果iOS超级签名源码技术解析
  3. Linux指令not found
  4. 前端微信小程序实战篇
  5. NOIP2018 游记
  6. exchange 2010高可用平台的搭建和配置
  7. C++程序设计:字符图形输出(空白三角形)
  8. Vim快捷键汇总 - Jeffery Lee的专栏 - CSDNBlog
  9. 初试Zookeeper---概念篇
  10. Redis数据结构Set应用场景--黑名单校验器、京东与支付宝抽奖、微博榜单与QQ群的随机展示、帖子点赞、关注与粉丝、微关系计算、HyperLogLog的入门使用
  11. 13- 数据建模-建模方法三:实体建模
  12. 周末作业——循环练习题
  13. ds5100更换电池 ibm_IBM DS5000系列更换电池
  14. Linux (CentOS) 系统下载地址
  15. booth乘法器的原理与verilog实现
  16. sql 关于一表多个主键唯一性的约束
  17. 前端HTML5视频_HTML5核心-张晓飞-专题视频课程
  18. Go 单元测试综合案例
  19. 组织架构图实现——jOrgChart的使用
  20. PageHelper 与 PageInfo 的坑

热门文章

  1. Linux网卡驱动分析之RTL8139(五)
  2. 前端做图,零基础如何学习数位板绘画?
  3. 操作无法完成,因为该文件已在system中打开
  4. Physics-informed neural networks for inverse problems in nano-optics and metamaterials
  5. 此Slashdotcn模仿彼Slashdot
  6. 网络基础--路由器的基本配置
  7. 常用 J2EE 应用服务器比较
  8. 夜神模拟器配合Burpsuite进行抓包
  9. 计算机综合症要拍片,害怕去医院拍片,辐射太可怕?关于影像学检查的真相在这里...
  10. IoT物联网速成课程