Liferay サイトを対象として、Java で記述された Selenium Web Driver テストがあります。
// Login
driver.get(baseUrl + "/");
driver.findElement(By.id("_58_login")).sendKeys(login);
driver.findElement(By.id("_58_password")).sendKeys(password);
driver.findElement(By.xpath("//input[@value='Sign In']")).click();
// Try to navigate to dashboard and expect error
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Liferay")));
driver.get(baseUrl + "/user/tm2/so/dashboard");
driver.findElement(By.xpath("//h3[contains(., 'Not Found')]"));
問題は、断続的に (約 50% の時間)、テストが例外で失敗することです。org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"//h3[contains(., 'Not Found')]"}
テスト中に Web ドライバーのブラウザーの動作を監視すると、[サインイン] ボタンをクリックして、ログイン ルーチンが期待どおりに機能することがわかります。しかし、ページがランディング ページに到達すると、30 秒間ハングし (私の暗黙のタイムアウト設定)、例外がスローされます。
私の疑いは、driver.get(baseUrl + "/user/tm2/so/dashboard")
呼び出しが何らかの形でスキップされたことです。ログイン ルーチンが終了するまで driver.get ナビゲーションが発生しないように WebDriverWait をセットアップしたことがわかりますが、役に立たないようです。
何か案は?
更新:問題は Selenium に関連していないことがわかりました。これは、URL に移動すると現在のページが更新されることがあるアプリケーション自体の問題です。