web-dev-qa-db-ja.com

AppiumとRubyを使用してiOSアプリをテストするときに、要素が読み込まれるのを待ちますか?

IOSアプリをテストしていますが、Appiumの速度が速すぎるため、ログイン後に要素を操作できません。

誰かがAppiumiOSテストを待つWebDriverWaitスタイルの使用例を教えてもらえますか?できればRubyで。

ありがとう。

9
Aaron Shaver

これは私にとってはうまくいきましたが、私はAppiumを初めて使用します

#code that navigated to this page
wait = Selenium::WebDriver::Wait.new :timeout => 10
wait.until { @driver.find_element(:name, 'myElementName').displayed? }
#code that deals with myElementName
13
user1919861

この構造を使用して、いくつかの要素が表示されるのを待ちます。

wait_true { exists { find_element(:xpath, path_to_element) } }

もちろん、:xpathだけで見つけることはできません。

また、タイムアウトを設定することもできます。

wait_true(timeout) { exists { find_element(:xpath, path_to_element) } }
6
Dmitry

これが私が思いついたものですが、Javaで。少し引き出されていますが、どのように待つべきかを説明しています。秒単位の待機時間がかかり、要素がまだ存在するかどうかを毎秒チェックします。要素を見つけたら、それが表示されていることを確認して、操作できるようにします。 「ドライバー」は明らかにWebDriverオブジェクトです。

public void waitForVisible(final By by, int waitTime) {
    wait = new WebDriverWait(driver, timeoutInSeconds);
    for (int attempt = 0; attempt < waitTime; attempt++) {
        try {
            driver.findElement(by);
            break;
        } catch (Exception e) {
            driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
        }
    }
    wait.until(ExpectedConditions.visibilityOfElementLocated(by));
}
5
plosco

私はこのソリューションをappiumJavaで使用しています。

  • Thread.sleep(1000);

  • WebDriverWait wait = new WebDriverWait(driver, 30);wait.until(ExpectedConditions.elementToBeClickable(By.name("somename")));

3
user2285818