欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Selenium 1.0的一些经验

程序员文章站 2022-04-16 22:06:07
...
  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>
    
     
相关标签: Selenium