Selenium 1.0的一些经验
程序员文章站
2022-04-16 22:06:07
...
- 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); } }
- 在页面上对表单数据进行验证的时候,我们可能会在用户输入的时候就进行验证,而不是等待用户提交的时候。一般有两种做法。一种是每输入一个字符就验证(一般用keyPress、keyDown、keyUp等事件),例如某个文本框只能输入数字,用type输入数据是不会触发验证的,这时可以用keyPress等方法输入单个数据来触发验证。另一种是在失去焦点的时候验证,例如验证textarea里的数据不会超长,这时用type输入数据也是不会触发验证的,即使用focus切换焦点到别的HTML元素上也大多数情况下不管用。这时候可以使用fireEvent("", "blur")来触发失去焦点事件。
- 运行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
- 有时候我们会将一个iframe作为编辑器使用,如iframe的内容是
包含这个iframe页面的代码是<html> <body id="editor" contentEditable="true"> </body> </html>
selenium test case的代码可以这样写<html> <body> <p>Editor</p> <iframe id="frame1" src="frame1.htm"> </iframe> </body> </html>
不需要使用selectFrame来选择要操作的iframe。对于输入的内容,有些跟HTML冲突的必须做一些转换,例如<,>,"等要转换成实体如<,>,"。例如如果要输入换行,则直接使用<br/>即可(不需要做转换),下面是一个例子selenium.type("//body[@id='editor']", "werwerwqerqwer"); assertEquals("werwerwqerqwer", selenium.getText("//body[@id='editor']"));
实际上输入的是一段HTML文本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());
<html> <body> <a href="test.jsp">link</a> <br/> <div class="content">hello world</div> </body> </html>