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

页面元素中的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非唯一,这时页面会抛出异常。

时间: 2024-11-03 07:22:28

漫话ID(上)——Name和ID的种种的相关文章

如何设置联普路由器上登录的ID

  设置普联路由器上登录的ID步骤1.打开路由器设置页面 TP-Link ID是TP-Link云设备(包括云路由器),连接云服务器的账号,登录该ID后,云设备可以进行在线升级.应用安装.APP远程管理等服务,建议您使用云设备时登录TP-LINK ID. 登录之前,请确认您的路由器是云路由器(包装盒或壳体底部有APP下载二维码). 电脑连接路由器后,在浏览器上输入路由器的管理地址,输入管理员密码后登录管理界面.如下图: 注意问题: 管理员密码是第一次设置这台路由器时,用户自己创建的.如果忘记了,只

怎样在Mac上切换Apple ID和iCloud账号

  所有的用户都应该拥有自己的Apple ID, 这个ID不仅与你的iCloud账号,iMessage,FaceTime, App store,iTunes, iBooks 和Passbook以及Apple pay绑定着,你还可以在新的Mac系统上使用这个ID来登录.因为每个用户应该都有自己独一无二的apple id并与他们的设备对应,因此有时候用户要在mac上更改账户. Mac实际上是支持多用户同时使用的,不同的用户能通过登录自己的id在相同的mac上进入到属于自己的空间. 1.点击左上角

c#-C#微信开发群发视频,根据上传的media id获取新的id,微信总是提示媒体id不合法,在线请教

问题描述 C#微信开发群发视频,根据上传的media id获取新的id,微信总是提示媒体id不合法,在线请教 根据我上传的视频素材返回给我的media id,我调用微信的官方接口和文档进行post提交,但是微信总是返回给我不合法的媒体ID,我的格式都是正确的,想请教一下大家,是哪里有问题,在线急等 解决方案 media_id 获取 解决方案二: 你好,我也遇到了这个问题,你解决了吗? 解决方案三: 你好,我也遇到了这个问题,你解决了吗? 解决方案四: 你好,我也遇到了这个问题,你解决了吗? 解决

基于ARM-contexA9-Linux驱动开发:如何获取板子上独有的ID号

每个CPU,都有它固定的ID号,ID号就是这个CPU唯一的标识,它可能隐含着CPU的生产日期,版本号,型号等等,那么,在我们的这款友善之臂Tiny4412的板子上,我的这个CPU的ID又是多少呢?从我在光盘里拿到的linux-3.5内核其实已经将ID相关的驱动开发好了,我们在内核启动的过程中就可以看到板子CPU的ID:     看下图,我们看到CPU EXYNOS4412 (Id 0xe4412011).这个就是我板子上CPU的ID号.其它跟我相同的板子,虽然CPU也是相同的,但是板子的ID号会

javascript typeof id===&#039;string&#039;?document.getElementById(id):id解释[原创]_基础知识

一般来说想要理解这段代码,需要掌握如下两个函数 一个是 typeof 一个就是三元运算符 看完了上面的文章再看下面的就比较好理解了 一般来说常用的函数代码 function $(id){ return typeof id==='string'?document.getElementById(id):id;} var GetBy = function (id) { return "string" == typeof id ? document.getElementById(id) : i

Linux id 命令 - 显示用户id和组id信息

要登入一台计算机,我们需要一个用户名.用户名是一个可以被计算机识别的身份.基于此,计算机会对使用这个用户名的登陆的人应用一系列的规则.在Linux系统下,我们可以使用 id 命令. 什么是 id 命令 id 命令可以显示真实有效的用户 ID(UID) 和组 ID(GID).UID 是对一个用户的单一身份标识.组 ID(GID)则对应多个UID. 如何使用 id 命令 id 命令已经默认预装在大多数 Linux 系统中.要使用它,只需要在你的控制台输入id.不带选项输入 id 会显示如下.结果会使

苹果平板iPad Air如何更改ID?iPad Air更改ID方法

方法一.在设置更换 Apple ID 账号 1.我们在ipad air主屏点击"设置"按钮,然后进入如下图所示 2.接着在设置中找到"iTunes Store 和 App Store"然后点击你会发现在右边窗口会看到有 iPad 上的 Apple ID 账号  3.现在我们点击我们的apple id在弹出对话框我们点击"注销"选项,如图. 4.注销当前apple id之后我们就可以重新登录另一个苹果id了哦. 方法二.直接在 App Store

Unix/Linux中实际用户ID,有效用户ID与保存设置用户ID

real user ID:实际用户ID,指的是进程执行者是谁 effective user ID:有效用户ID,指进程执行时对文件的访问权限 saved set-user-ID:保存设置用户ID,作为effective user ID的副本,在执行exec调用时后能重新恢复原来的effectiv user ID. 上面这三个ID是相对于进程而言的. set-user-ID:设置用户ID,这是相对于文件来说的.设置了set-user-ID位的可执行程序,执行时,进程的effective user

java 递归 输入一个ID 怎么把这个ID下所有的子ID 放入一个list里面 递归都写好了

问题描述 java 递归 输入一个ID 怎么把这个ID下所有的子ID 放入一个list里面 递归都写好了 HashMap> results = new HashMap>(); //输入的ID int ID=Integer.parseInt(Catid); //表中所有的数据 aas=cloudnewscategory.selectAllGory(); System.out.println("所有记录="+aas); for (CloudNewsCategory gory :

mysql-Mysql 条件查询时记录的唯一id,有多个id并且已知的,该怎么查询

问题描述 Mysql 条件查询时记录的唯一id,有多个id并且已知的,该怎么查询 已知id的值,比如 int pId[100]; CString sql; sql.Format("select * from table_name where id!=%d and id!=%d and id!=%d .....",pId[0],pId[1],pId[2],.....); 难道是这样写吗? 解决方案 mysql多ID查询查询多个ID的数据 解决方案二: 用not in试试,这么写; sel