1

ボタンをクリックするには、要素が表示されているビューポートにスライドするのを待つ必要があります。これは確実に機能します:

await browser.sleep( 1200 );
await btnToggleDeactivateQuestionnaire.click();

ただし、「browser.sleep()」の使用は悪い習慣と見なされることを知ったので、分度器のExpectedConditionsを使用してこれを達成したいと考えています。

let isPresent = EC.presenceOf(btnToggleDeactivateQuestionnaire);
let isVisible = EC.visibilityOf(btnToggleDeactivateQuestionnaire);
let isClickable = EC.elementToBeClickable(btnToggleDeactivateQuestionnaire);
let isPresentAndVisibleAndClickable = EC.and(isPresent, isVisible, isClickable);

await browser.wait(isPresentAndVisibleAndClickable, 4000);
await btnToggleDeactivateQuestionnaire.click();

4 秒待った後、次のエラーが表示されます。

Failed: Wait timed out after 4019ms
TimeoutError: Wait timed out after 4019ms
    at C:\xxx\lib\promise.js:2201:17
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)

多くの試行錯誤の後、「EC.presenceOf」のみを使用するとうまくいくことがわかりました。ただし、「EC.visibilityOf」または「EC.elementToBeClickable」でチェーンするか、いずれかを単独で使用するとすぐに、テストは 4 秒間停止し、その時点で失敗します。

私には、その振る舞いはまったく意味がないように思えます。特に、その要素はページが読み込まれてから存在するため、表示されておらず、まだクリック可能です (最初にスライドして表示する必要があるため)。

ExpectedConditions の一般的な理解、または角度のないサイトでの動作は間違っていますか? ここで何が欠けていますか?

4

1 に答える 1