场景: 单击一个按钮,出现一个带有输入字段和取消/保存按钮的 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")));