Selenium 1.0的一些经验

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

猜你喜欢

转载自silentlakeside.iteye.com/blog/1094958