シナリオ: ボタンをクリックすると、jquery モーダル ダイアログが表示され、入力フィールドとキャンセル/保存ボタンが表示されます。入力フィールドが空の場合、保存ボタンは無効になり、カーソルを合わせるとツールチップにテキストが表示されます。
テスト: ツールチップのテキストが本来の意味を表していることを確認します。
使用: FF v26、ChromeDriver_win32_2.2 および Chrome v31.*、Selenium-java-2.39.0、JQueryUI、および JQuery.tipped.3.2.0。
問題(両方のブラウザー) : NoSuchElementException: 要素が見つかりません:{"method":"id":"selector":"FileNumberRequiredText"}
Javascript :
<script type="text/javascript">
$(document).ready(function() {
$('#new_file_description').prop('maxlength','150');
$("#new_file_number").bind("input keyup paste", toggleSaveButtonEnabled);
function toggleSaveButtonEnabled() {
if ($("#new_file_number").val() == null || $.trim($("#new_file_number").val()) == '') {
var element = Tipped.findElement($("#button-save")[0]);
Tipped.create("#button-save", "<strong id='FileNumberRequiredText'><direct:message key='file.number.required'/></strong>", {
skin: 'custom',
hook: 'rightmiddle'
});
} else {
var element = Tipped.findElement($("#button-save")[0]);
Tipped.remove(element);
}
}
}
</script>
ダイアログボックス内ではなく、同様のケースで作業しているこのテストコード:
Thread.sleep(5000L);
try {
WebElement webElement = driver.findElement(By.cssSelector("#button-save"));
Actions hover = new Actions(driver);
hover.moveToElement(webElement).build().perform();
WebElement hiddenDiv = driver.findElement(By.id("FileNumberRequiredText"));
String script = "return document.getElementById('FileNumberRequiredText').innerHTML";
String toolTipText = (String) ((JavascriptExecutor) driver).executeScript(script, hiddenDiv);
System.out.println("Tool tip text is: " +toolTipText+"\n");
assertTrue(toolTipText.matches("^[\\s\\S]*File Number is required and cannot be blank\\.[\\s\\S]*$"));
} catch (Error e) {
verificationErrors.append("Text does not match\n"+e.toString());
}
FireBug を使用すると、要素がその ID とともに存在することがわかります。
<div class="t_ContentContainer t_clearfix t_Content_custom">
<strong id="FileNumberRequiredText">File Number is required and cannot be blank.</strong>
</div>
また、ホバー後に一時停止し、clickAndHoldを使用して無駄にしようとしました。考え?
更新:それ以来、私は運が悪いので次のことを試しました:
WebElement hiddenDiv = (new WebDriverWait(driver, 5)).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#FileNumberRequiredText")));
と
WebElement hiddenDiv = (new WebDriverWait(driver, 5)).until(ExpectedConditions.presenceOfElementLocated(By.id("FileNumberRequiredText")));