appium での要素操作方法TIPS(Java)
要素の検索
画面外の要素
取れないらしい。そもそも取れないので「この要素までスクロール」もできない。私がやったときは適当にスワイプしたけど正しい(安定した)方法は不明。
ダイアログ
ちょっと前までふつーに findElement 系の関数で取得できたけど今はこれみたい
appiumDriver.switchTo().alert().accept();
// appiumDriver は AppiumDriver のインスタンス
リトライ
Webview なんかで画面を表示していたりネットワークからの情報をもとに画面を表示させたりする場合、タイムアウトまでにロードが完了しない場合がある。普通にウエイトを入れてもいいけど何回かリトライさせるようにすると多少は時間の短縮が図れる。
けどふつーはなんでそんなに重いのか考えたほうが良い。
/*
* sleepの例外を握りつぶしただけの関数
*/
static public void sleep(int millis) {
try {
Thread.sleep(millis);
} catch (Exception e) {
// ただのウエイトなので例外はスタックトレースだけ出して適当に握りつぶす
e.printStackTrace();
}
}
/**
* try find element /retry/ times.
* @param by
* @param retry
* @return
*/
public WebElement findElementByXPathSometime(final String by, final int retry){
int count;
RuntimeException ex=null;
WebElement elem;
for(count = 1;count<=retry;count++) {
try {
logger.debug("try to get element : " + by.toString());
// log4jのロガー
elem = appiumDriver.findElementByXPath(by);
// appiumDriver は AppiumDriver のインスタンス
return elem;
}catch(RuntimeException e) {
ex = e;
logger.debug("failed to get element");
sleep(5000);
}
}
要素のクリック
なんか WebElement#click()
が反応してくれない要素がある。多分 Webview 内の要素には反応してくれないっぽいので以下のようにする。
WebElement element = findElementByXPathSometime(AppElements.SETTING,20);
new TouchAction(appiumDriver).tap(element).perform();
// appiumDriver は AppiumDriver のインスタンス
テキストボックス
これはもう無理だった。何故か AppiumDriver#findElementByほげほげ()
で要素がみつけられない。
(new TouchAction(appiumDriver)).tap(123, 456).perform();
// テキストボックスを強引にタップ
sleep(1000);
appiumDriver.getKeyboard().pressKey("nyuuryokusitaimoziretu");
なお、iOSシミュレータでハードキーボードが有効になっているとソフトキーボードがでてこないので AppiumDriver#getKeyboard()
が失敗する。不便。
Author And Source
この問題について(appium での要素操作方法TIPS(Java)), 我々は、より多くの情報をここで見つけました https://qiita.com/Real_analysis/items/e69cad54bc49198a6634著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .