快速业务通道

漫话ID(上)——Name和ID的种种

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20

页面元素中的ID这东西想必很多人都用过,在JavaScript函数中也经常要用到 document.getElementById()这个方法来定位一个元素并操作它。在Web自动化测试中,我们也经常用到元 素的id来定位元素,这样看起来id是个好玩意儿。

在之前的一篇文章Selenium IDE实践中,Selenium录制的脚本中有下面这一段代码:

[Test]
        public void TheNewTest()
        {
            selenium.Open("http://www.google.cn/");
            Assert.AreEqual("Google", selenium.GetTitle());
            selenium.Type("q", "Selenium 介绍");
            selenium.Click("btnG");
            selenium.WaitForPageToLoad("30000");
            Assert.AreEqual("Selenium 介绍 - Google 搜索",  selenium.GetTitle());
            try
            {
                Assert.IsTrue(selenium.IsTextPresent("图片、新闻搜索"));
            }
            catch (AssertionException e)
            {
                verificationErrors.Append(e.Message);
            }
        }

注意Aaron做了标记的那两行的两个方法,Selenium.Type()方法顾名思义是向某个控件输入内容的 ,看着Aaron的例子应该会明白第二个参数是输入的内容,那么第一个参数想必是控件的属性了。对,第 一个控件是google搜索页面那个我们经常使用的输入框,如果我们用IE Developer Toolbar来查看该文本 输入框,可以看到下面的内容:

<input title="Google 搜索" maxLength="2048" size="55" name="q" autocomplete="off"/>

同样我们Selenium.Click的btnG则是Google页面上那个“Google Search”按钮的name

<input title="Google Search" maxLength="2048" size="55" name="q" autocomplete="off"/>

这里面google使用的是元素的name属性,对应于document.getElementsByName()方法,也是定位元素 的一种方法。下面问题来了,Name与ID有什么关系呢?

话说表单的name与id其实是同一个意思,都是为了标记对象名称。它们所不同的是:name是Netscape 的、id是Microsoft的,这种说法到底准不准确我们暂且不论,我们更关心的是怎么用好这两个东西。

有总结如下:

Name用作表单(form)的控件名,提交的数据都用控件的name而不是id来控制。因为有许多name会同 时对应多个控件,比如checkbox和radio,而id必须是全文档中唯一的。此外浏览器会根据name来设定发 送到服务器的request。如果用id,服务器无法得到数据的。Name还可以用于在其他frame或window指定 target。对于name来讲,它有很多用途,不能完全由ID来代替。关于name的用途相关内容建议参看文末引 用1原帖及帖下的热烈讨论。

ID:根据HTML 4.0 的定义,除 BASE, HEAD, HTML, META, SCRIPT, STYLE, TITLE 标签外,id 都可用, 包括了Body li a table tr td th p div span pre dl dt dd font b等.另外asp.net进程在处理aspx页 面时不允许有ID非唯一,这时页面会抛出异常。

如果不是动态页面,我们是能成功在页面中加入多个相同的ID的,此时ID已经自动变成了数组, document.getElementById仍然有效,不过只拿到第一个。关于ID的作用也不在本文讨论了,相关内容可 以参见

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号