1. Selenium只能判断页面是否加载完成(waitForPageLoad),当页面使用AJAX加载动态内容的时候,会出现页面已经加载完成但是真正的内容可能还没加载完,这时候测试就会无法进行。这时候可以使用isElementPresent判断某个HTML元素是否已经创建或者使用getText判断某个元素的文本是否与预定的值一致,这样可以判断动态内容是否已经加载。当然期间要加入等待的代码(Thread.sleep)和对超时的控制。
protected void waitForElement(String locator, int timeout)
			throws InterruptedException {
		for (int second = 0;; second++) {
			if (second >= timeout) {
				fail("............timeout............");
			}
			try {
				if (selenium.isElementPresent(locator)) {
					break;
				}
			} catch (Exception e) {
			}
			Thread.sleep(1000);
		}
	}
  1. 在页面上对表单数据进行验证的时候,我们可能会在用户输入的时候就进行验证,而不是等待用户提交的时候。一般有两种做法。一种是每输入一个字符就验证(一般用keyPress、keyDown、keyUp等事件),例如某个文本框只能输入数字,用type输入数据是不会触发验证的,这时可以用keyPress等方法输入单个数据来触发验证。另一种是在失去焦点的时候验证,例如验证textarea里的数据不会超长,这时用type输入数据也是不会触发验证的,即使用focus切换焦点到别的HTML元素上也大多数情况下不管用。这时候可以使用fireEvent("", "blur")来触发失去焦点事件。
  2. 运行selenium test case的时候有时会出现Access is denied的IE错误,这应该是selenium的一个bug,可以通过修改selenium server.jar里的core\scripts\htmlutils.js来修正(在函数openSeparateApplicationWindow的前两行加入try/catch以捕获该异常),具体内容可以参考http://www.nearinfinity.com/blogs/stephen_mouring_jr/selenium_mojo_access_is_denied.html#more
  3. 有时候我们会将一个iframe作为编辑器使用,如iframe的内容是
<html>
    <body id="editor" contentEditable="true">
    </body>
</html>
  1.  包含这个iframe页面的代码是
<html>
    <body>
        <p>Editor</p>
        <iframe id="frame1" src="frame1.htm">
        </iframe>
    </body>
</html>
  1.  selenium test case的代码可以这样写
selenium.type("//body[@id='editor']", "werwerwqerqwer");
		assertEquals("werwerwqerqwer", selenium.getText("//body[@id='editor']"));
  1.  不需要使用selectFrame来选择要操作的iframe。对于输入的内容,有些跟HTML冲突的必须做一些转换,例如<,>,"等要转换成实体如&lt;,&gt;,&quot;。例如如果要输入换行,则直接使用<br/>即可(不需要做转换),下面是一个例子
StringBuffer content = new StringBuffer();
		content.append("<html>").append("<br/>");
		content.append("<body>").append("<br/>");
		content.append("<a href="test.jsp">link</a>")
				.append("<br/>");
		content.append("<br/>").append("<br/>");
		content.append(
				"<div class="content">hello world</div>")
				.append("<br/>");
		content.append("</body>").append("<br/>");
		content.append("</html>").append("<br/>");
		selenium.type("//body[@class='editbox']", content.toString());
  1.  实际上输入的是一段HTML文本
<html>
<body>
<a href="test.jsp">link</a>
<br/>
<div class="content">hello world</div>
</body>
</html>