利用 Selenium 自动化 web 测试
上一篇 / 下一篇 2011-11-17 22:44:23 / 个人分类:loadrunner
查看( 3983 ) /
评论( 13 )
[p=30, 2, left]简介[/p][p=30, 2, left]Selenium 是一个健壮的工具集合,跨很多平台支持针对基于 web 的应用程序的测试自动化的敏捷开发。它是一个开源的、轻量级的自动化工具,很容易集成到各种项目中,支持多种编程语言,比如 .NET、Perl、Python、Ruby 和 Java™ 编程语言。[/p]51Testing软件测试网Rb0fc W8J kf8j
[p=30, 2, right]回页首[/p][p=30, 2, left]利用 Selenium 测试 Ajax 应用程序[/p][p=30, 2, left]Asynchronous JavaScript and XML (Ajax) 是一种用于创建交互式 web 应用程序的 web 开发技术。Ajax 应用程序的一个特征是,不会导致一次重新加载整个页面。相反,浏览器将具有一个对服务器的异步调用以获得数据,并且只刷新当前页面的特定部分。要提高 web 页面的交互性、响应速度和可用性,测试 Ajax 应用程序的过程需要一些改变。[/p][p=30, 2, left]我们首先刷新 web 页面,然后就是等待,直到异步调用完成。完成之后,可以继续进行验证。此时,出现适当等待时间的问题。[/p][p=30, 2, left]一种选择是在测试应用程序中简单地暂停一段固定的时间,这在大多数情况下都是可行的。在有些情况下,比如说网络吞吐量很慢时,Ajax 调用在暂停一段特定的时间之后没有完成,会导致测试用例失败。另一方面,如果暂停时间太长,会使得测试慢得不可接受。[/p][p=30, 2, left]Selenium 提供了更为高效的处理等待的方式。一种可能做法是,使用类 com.thoughtworks.selenium.Wait 来等待一个元素或文本在页面上出现或消失。可以在 until() 函数中定义等待的退出条件,或者扩展 Wait 类来实现等待退出。清单 1 是使用 Wait 类的样例代码。它将在条件满足时停止等待,或者在超出最大等待时间时返回一个超时异常。[/p]
n ~up:^HK N-x D2UY0 清单 1. 等待元素或文本出现
3iD \J*h2\3e0
h EFgO6M9Lf dC0 [p=30, 2, left]另一种选择是使用 Selenium 中的 waitForCondition 函数,一个 JavaScript 代码片段将被作为参数传递给该函数。一旦 Selenium 检测到条件返回为真,它将停止等待。您可以等待一些元素或文本出现或者不出现。JavaScript 可以运行在由Selenium.browser.getCurrentWindow() 函数弹出的应用程序窗口中。清单 2 是检查窗口状态的样例代码。它只工作在 Firefox 中。[/p]51Testing软件测试网mR[1nW F%BH!M,zJ
清单 2. 等待窗口就绪的状态
rP(^u3sW0
&zk@(}$iDT0 51Testing软件测试网 _xO4gh(Ww ?
[p=30, 2, right]回页首[/p][p=30, 2, left]如何支持 dojo 应用程序[/p][p=30, 2, left]Dojo 是一个常用的 JavaScript 工具包,用于构造动态 web 界面。使用 Selenium 测试 Dojo 应用程序时的一个关键点是认识 Dojo 小部件和记录它们的操作。作者定义的 Dojo 小部件处于抽象级别。页面运行时,会将 Dojo 小部件转换成基本的 HTML 代码。存在很多由 Dojo 自动生成的 HTML 代码,因此,Dojo 小部件的认识可能与传统 HTML 小部件有些不同。[/p][p=30, 2, left]Dojo 小部件上执行的操作(包括文本字段、按钮复选框和单选按钮)可能与 HTML 小部件相同。但是,Dojo 在组合框上提供的日期选择器和其他额外的小部件可能需要特定的处理。[/p]
;fMehI$is,f0 图 1. Dojo 组合框
H3w.?7s@6V7r4g'c0
4p ou'EhQ4H | ?O*~0
/[/M"~*@*V?/z0 [p=30, 2, left]使用 Selenium IDE 来记录图 1 中提供的组合框上选中的操作。单击向下箭头,会出现一个下拉列表。选中第三项 Stack(SWG)。记录的脚本提供在图 2 中。[/p]51Testing软件测试网|-tW|z
图 2. Selenium IDE 记录的脚本
0o)Xg+P+A-{0 51Testing软件测试网En:BNa+F6W%O7is U
h$sZ)_0BQ0 [p=30, 2, left]有时,只会由 IDE 生成第二行脚本。在这种情况下,添加单击箭头按钮的操作。对于上面的脚本,如果第一行被重新播放,那么它应该生成下拉列表。但是它不执行任何操作。对于多个 Dojo 小部件,单击并不真正执行单击操作。将 click(locator) 更改为clickAt(locator, coordString) 或者 MouseDown(locator) 和 MouseUp(locator)。[/p][p=30, 2, left]对于下拉列表,等待时间应该相加。像图 2 中展示的脚本一样,选中项的单击操作将会刚好在单击向下箭头按钮之后执行。它可能会因为下拉列表没有出现而失败。简单地添加一个 pause 命令,或者使用 waitFor 命令等待菜单项元素出现,并继续执行下一个命令。[/p][p=30, 2, left]修改后的将会自动化 Dojo 组合框上的选择的脚本展示在图 3 中。[/p]51Testing软件测试网4SB\~7i'u5]!q
图 3. 修改后的在 Dojo 组合框中进行选择的 IDE 脚本51Testing软件测试网r] y8|N/h
'E'H4YuX)qu0 51Testing软件测试网5C"lk/s}b
[p=30, 2, left]RC 代码展示在清单 3 中。[/p]
n sorZ+?@8xM0 清单 3. 自动化 Dojo 组合框中选择操作的 RC 代码51Testing软件测试网0O7rMFhH;S0s ^1z
)\-~'Q#x:a2L.t1h0
l-M6I@?!soq0 图 4. 日期选择器
P[H.b X#k}p0
*gh_(G_0
ukRnm^|0 [p=30, 2, left]对于图 4 中的日期选择器例子,执行的操作可能不会被 IDE 记录。编写如下面清单 4 所示的 RC 代码。[/p]51Testing软件测试网wJ%i M&q%n
清单 4. 自动化选择的 RC 代码51Testing软件测试网(N0CL,@O4rR
51Testing软件测试网e/tM.O-N(A8Z'a
[p=30, 2, left]如本例所示,Dojo 应用程序不能通过简单的 IDE 记录进行测试。这些脚本有可能不能通过测试。脚本中有一些丢失的操作,或者操作并不真正工作。脚本应该调整成能够在 IDE 和 RC 中顺利地执行。对于复杂的 Dojo 小部件,一种可能的解决方案是使用runScript(String) 函数,因为 Selenium 对 JavaScript 提供很好的支持。清单 5 提供一个 JavaScript 语句来模拟组合框选择。[/p]51Testing软件测试网X-h*ARf xo
清单 5. 运行 JavaScript 语句在组合框上进行选择
{(Mi8l!h)O0
&P(G Vi$P Si5W8l2wx0
Q;T g6l)?2D1j@"OTy6L$dS0 [p=30, 2, right]回页首[/p][p=30, 2, left]如何利用 Ant 构建 Selenium 测试[/p][p=30, 2, left]诸如 Ant 这样的集成工具可以方便地构建 Selenium 测试和顺畅地运行测试用例,无需单独启动 Selenium 服务器。如果 Selenium 测试由 TestNG 驱动,那么定义清单 6 所示 TestNG Ant 任务。清单 6 中假设 classpath 是 TestNG.jar 文件的文件路径。[/p]
K*{\a] {u0 清单 6. TestNG Ant 任务
1SVHYm0
51Testing软件测试网oGgv2hK
xq,\v7}
[p=30, 2, left]主要的目标是启动服务器、运行测试,然后停止服务器。这些任务按照 bulid.xml 中定义的顺序实现在清单 7 中。[/p]
)q|A1t1cz]guC-l0 清单 7. 启动服务器、运行测试用例并停止服务器的 Ant 任务
J/K~:[p{F{0
1z{$I jn0 [p=30, 2, left]代码更可取的地方是使用 waitfor 任务来测试 Selenium 服务器是否已成功启动,而不是暂停一段固定的时间。如果 URLhttp://localhost:4444/selenium-server/driver/?cmd=testComplete 可用,就意味着 Selenium 已经成功启动。在清单 7 中,它最多等待两分钟,并且每 100 毫秒在本地主机上检查一次 Selenium 服务器,以提供完整的 URL。[/p][p=30, 2, left]start-server 任务的详细内容定义在清单 8 中。Firefox profile 模板位置和其他参数可以指定在标记 <arg> 中。[/p]51Testing软件测试网I*LSY#i`?}$]\
清单 8. 详细的启动服务器的 Ant 任务51Testing软件测试网7Cl!M?o&|x$Zenm
51Testing软件测试网g&S]/^4oQ A2P
[p=30, 2, left]runTestNG 任务的详细内容定义在清单 9 中。testng 任务的常用属性包括 outputDir 和 xmlfileset。属性 outputDir 用于设置输出报告位置。属性 xmlfileset 用于包含启动 XML 文件。更多选项请参考 TestNG 正式网站。[/p]51Testing软件测试网N.wz-C e1c] n.H
清单 9. 运行测试用例的 Ant 任务51Testing软件测试网8szF$pO
7\g}D*?C*j _,L0 [p=30, 2, left]stop-server 任务的详细内容定义在清单 10 中。[/p]51Testing软件测试网lFs `m5B)k&k }
清单 10. 停止 Selenium 服务器的 Ant 任务51Testing软件测试网`a&?"m V!DB
51Testing软件测试网TgK7Nc(C){6^T
[p=30, 2, left]上面列出了关键任务。将它们组合到您的构建文件,以便利用 Ant 完成良好集成的测试。[/p]51Testing软件测试网D\.QW,TR
[p=30, 2, right]回页首[/p][p=30, 2, left]如何支持测试 HTTPS 网站[/p][p=30, 2, left]随着互联网日益强调信息安全,越来越多的 web 应用程序在使用 SSL 身份认证。Selenium IDE 默认支持 HTTPS,但是 Selenium RC 不是这样的。Internet Explorer 和 Firefox 中的解决方案各不相同。[/p][p=30, 2, left]对于 IE,在 setup 目录下的 SSL 支持文件夹中在安装一个证书。如果使用的版本早于 Selenium-RC 1.0 beta 2,请使用 *iehta 运行模式,对于 Selenium-RC 1.0 beta 2 或更晚的版本,使用 *iexplore 运行模式。[/p][p=30, 2, left]如果测试 HTTPS 网站时出现一个如下所示的安全警告,那么单击 View Certificate 并安装 HTTPS 网站的证书。如果继续弹出警告,那么考虑在 IE 中进行配置。打开 Tool > Internet Options > Advanced,并取消选择 security 分类下的 Warn about invalid site certificates 和 Check for publisher's certificate revocation。[/p]51Testing软件测试网,|)L_"]2v9H-c.z
图 5. 测试 HTTPS 网站时的安全警告51Testing软件测试网9?.^)_3I-Oj
2BU]Or~KF0 51Testing软件测试网&[1{;L/~snQ
[p=30, 2, left]创建新的 Firefox 配置文件[/p][p=30, 2, left]对于 Firefox,遵循以下步骤创建定制的配置文件,然后重启服务器:[/p]
[p=30, 2, right]回页首[/p][p=30, 2, left]如何高效地认识不带 ID 属性的 web 元素[/p][p=30, 2, left]使用一个有含义的 ID 或名称是一种高效且方便的定位元素的方式。它也可以改善测试用例的可读性。但是为了每个元素具有一个有含义的、惟一的 ID(尤其是动态元素),Selenium 提供多种策略来认识元素,比如说 Xpath、DOM 和 CSS。[/p][p=30, 2, left]下面是一个样例,使用三种策略来定位图 6 中提供的动态表格中的一个元素。HTML 代码在清单 11 中。[/p]
fq9]s)^/H0 图 6. 动态表格样例51Testing软件测试网*cyH#U6p+F
7S#^Qr$b(Z`^0 51Testing软件测试网$zr0[A {'f[|xy G#}
[p=30, 2, right]回页首[/p][p=30, 2, left]利用 Selenium 测试 Ajax 应用程序[/p][p=30, 2, left]Asynchronous JavaScript and XML (Ajax) 是一种用于创建交互式 web 应用程序的 web 开发技术。Ajax 应用程序的一个特征是,不会导致一次重新加载整个页面。相反,浏览器将具有一个对服务器的异步调用以获得数据,并且只刷新当前页面的特定部分。要提高 web 页面的交互性、响应速度和可用性,测试 Ajax 应用程序的过程需要一些改变。[/p][p=30, 2, left]我们首先刷新 web 页面,然后就是等待,直到异步调用完成。完成之后,可以继续进行验证。此时,出现适当等待时间的问题。[/p][p=30, 2, left]一种选择是在测试应用程序中简单地暂停一段固定的时间,这在大多数情况下都是可行的。在有些情况下,比如说网络吞吐量很慢时,Ajax 调用在暂停一段特定的时间之后没有完成,会导致测试用例失败。另一方面,如果暂停时间太长,会使得测试慢得不可接受。[/p][p=30, 2, left]Selenium 提供了更为高效的处理等待的方式。一种可能做法是,使用类 com.thoughtworks.selenium.Wait 来等待一个元素或文本在页面上出现或消失。可以在 until() 函数中定义等待的退出条件,或者扩展 Wait 类来实现等待退出。清单 1 是使用 Wait 类的样例代码。它将在条件满足时停止等待,或者在超出最大等待时间时返回一个超时异常。[/p]
n ~up:^HK N-x D2UY0 清单 1. 等待元素或文本出现
3iD \J*h2\3e0
Wait wait = new Wait() { public boolean until() { return selenium.isElementPresent(locator); // or selenium.isTextPresent(pattern); } }; wait.wait("", timeoutInMilliseconds); |
h EFgO6M9Lf dC0 [p=30, 2, left]另一种选择是使用 Selenium 中的 waitForCondition 函数,一个 JavaScript 代码片段将被作为参数传递给该函数。一旦 Selenium 检测到条件返回为真,它将停止等待。您可以等待一些元素或文本出现或者不出现。JavaScript 可以运行在由Selenium.browser.getCurrentWindow() 函数弹出的应用程序窗口中。清单 2 是检查窗口状态的样例代码。它只工作在 Firefox 中。[/p]51Testing软件测试网mR[1nW F%BH!M,zJ
清单 2. 等待窗口就绪的状态
rP(^u3sW0
String script = "var my_window = selenium.browserbot.getCurrentWindow();" script += "var bool;"; script += "var readyState = (my_window.document.readyState);"; script += "if (readyState == 'complete'){"; script += "bool = 'true';"; script += "}"; script += "bool;"; selenium.waitForCondition(script, timeoutInMilliseconds); |
&zk@(}$iDT0 51Testing软件测试网 _xO4gh(Ww ?
[p=30, 2, right]回页首[/p][p=30, 2, left]如何支持 dojo 应用程序[/p][p=30, 2, left]Dojo 是一个常用的 JavaScript 工具包,用于构造动态 web 界面。使用 Selenium 测试 Dojo 应用程序时的一个关键点是认识 Dojo 小部件和记录它们的操作。作者定义的 Dojo 小部件处于抽象级别。页面运行时,会将 Dojo 小部件转换成基本的 HTML 代码。存在很多由 Dojo 自动生成的 HTML 代码,因此,Dojo 小部件的认识可能与传统 HTML 小部件有些不同。[/p][p=30, 2, left]Dojo 小部件上执行的操作(包括文本字段、按钮复选框和单选按钮)可能与 HTML 小部件相同。但是,Dojo 在组合框上提供的日期选择器和其他额外的小部件可能需要特定的处理。[/p]
;fMehI$is,f0 图 1. Dojo 组合框
H3w.?7s@6V7r4g'c0
4p ou'EhQ4H | ?O*~0
/[/M"~*@*V?/z0 [p=30, 2, left]使用 Selenium IDE 来记录图 1 中提供的组合框上选中的操作。单击向下箭头,会出现一个下拉列表。选中第三项 Stack(SWG)。记录的脚本提供在图 2 中。[/p]51Testing软件测试网|-tW|z
图 2. Selenium IDE 记录的脚本
0o)Xg+P+A-{0 51Testing软件测试网En:BNa+F6W%O7is U
h$sZ)_0BQ0 [p=30, 2, left]有时,只会由 IDE 生成第二行脚本。在这种情况下,添加单击箭头按钮的操作。对于上面的脚本,如果第一行被重新播放,那么它应该生成下拉列表。但是它不执行任何操作。对于多个 Dojo 小部件,单击并不真正执行单击操作。将 click(locator) 更改为clickAt(locator, coordString) 或者 MouseDown(locator) 和 MouseUp(locator)。[/p][p=30, 2, left]对于下拉列表,等待时间应该相加。像图 2 中展示的脚本一样,选中项的单击操作将会刚好在单击向下箭头按钮之后执行。它可能会因为下拉列表没有出现而失败。简单地添加一个 pause 命令,或者使用 waitFor 命令等待菜单项元素出现,并继续执行下一个命令。[/p][p=30, 2, left]修改后的将会自动化 Dojo 组合框上的选择的脚本展示在图 3 中。[/p]51Testing软件测试网4SB\~7i'u5]!q
图 3. 修改后的在 Dojo 组合框中进行选择的 IDE 脚本51Testing软件测试网r] y8|N/h
'E'H4YuX)qu0 51Testing软件测试网5C"lk/s}b
[p=30, 2, left]RC 代码展示在清单 3 中。[/p]
n sorZ+?@8xM0 清单 3. 自动化 Dojo 组合框中选择操作的 RC 代码51Testing软件测试网0O7rMFhH;S0s ^1z
selenium.clickAt("//div[@id='widget_offeringType']/div/div",””); |
)\-~'Q#x:a2L.t1h0
l-M6I@?!soq0 图 4. 日期选择器
P[H.b X#k}p0
*gh_(G_0
ukRnm^|0 [p=30, 2, left]对于图 4 中的日期选择器例子,执行的操作可能不会被 IDE 记录。编写如下面清单 4 所示的 RC 代码。[/p]51Testing软件测试网wJ%i M&q%n
清单 4. 自动化选择的 RC 代码51Testing软件测试网(N0CL,@O4rR
//click on the date field by id you defined; selenium.clickAt("dateBox",""); //wait for the drop down date box by id; selenium.waitForCondition("selenium.isElementPresent("widget_dateBox_dropdown")", \ "2000"); //click previous year 2008; selenium.clickAt("//span[contains(@class,'dijitCalendarPreviousYear')]", ""); //click on the month increase; //previous month would contains ‘dijitCalendarIncrease’. selenium.clickAt("//img[contains(@class,'dijitCalendarIncrease')]",""); //click on the date such as 28 of current month; If you do not specify //the td with the attribute of current month class, it will click \ on the //first 28 of previous month; selenium.click("//td[contains(@class,'dijitCalendarCurrentMonth')]/span[text()='28']"); |
[p=30, 2, left]如本例所示,Dojo 应用程序不能通过简单的 IDE 记录进行测试。这些脚本有可能不能通过测试。脚本中有一些丢失的操作,或者操作并不真正工作。脚本应该调整成能够在 IDE 和 RC 中顺利地执行。对于复杂的 Dojo 小部件,一种可能的解决方案是使用runScript(String) 函数,因为 Selenium 对 JavaScript 提供很好的支持。清单 5 提供一个 JavaScript 语句来模拟组合框选择。[/p]51Testing软件测试网X-h*ARf xo
清单 5. 运行 JavaScript 语句在组合框上进行选择
{(Mi8l!h)O0
selenium.runScript("dijit.byId("offeringType").setValue("Stack(SWG)");"); |
&P(G Vi$P Si5W8l2wx0
Q;T g6l)?2D1j@"OTy6L$dS0 [p=30, 2, right]回页首[/p][p=30, 2, left]如何利用 Ant 构建 Selenium 测试[/p][p=30, 2, left]诸如 Ant 这样的集成工具可以方便地构建 Selenium 测试和顺畅地运行测试用例,无需单独启动 Selenium 服务器。如果 Selenium 测试由 TestNG 驱动,那么定义清单 6 所示 TestNG Ant 任务。清单 6 中假设 classpath 是 TestNG.jar 文件的文件路径。[/p]
K*{\a] {u0 清单 6. TestNG Ant 任务
1SVHYm0
<taskdef resource="testngtasks" classpath="testng.jar"/> |
[p=30, 2, left]主要的目标是启动服务器、运行测试,然后停止服务器。这些任务按照 bulid.xml 中定义的顺序实现在清单 7 中。[/p]
)q|A1t1cz]guC-l0 清单 7. 启动服务器、运行测试用例并停止服务器的 Ant 任务
J/K~:[p{F{0
<target name="run_test" description="start,run and stop" depends="dist"> <parallel> <antcall target="start-server" /> <sequential> <echo taskname="waitfor" message="Waitforproxy server launch" /> <waitfor maxwait="2" maxwaitunit="minute" checkevery="100"> <http url="http://localhost:4444/selenium-server/driver/?cmd=testComplete" /> </waitfor> <antcall target="runTestNG" /> <antcall target="stop-server" /> </sequential> </parallel> </target> |
1z{$I jn0 [p=30, 2, left]代码更可取的地方是使用 waitfor 任务来测试 Selenium 服务器是否已成功启动,而不是暂停一段固定的时间。如果 URLhttp://localhost:4444/selenium-server/driver/?cmd=testComplete 可用,就意味着 Selenium 已经成功启动。在清单 7 中,它最多等待两分钟,并且每 100 毫秒在本地主机上检查一次 Selenium 服务器,以提供完整的 URL。[/p][p=30, 2, left]start-server 任务的详细内容定义在清单 8 中。Firefox profile 模板位置和其他参数可以指定在标记 <arg> 中。[/p]51Testing软件测试网I*LSY#i`?}$]\
清单 8. 详细的启动服务器的 Ant 任务51Testing软件测试网7Cl!M?o&|x$Zenm
<target name="start-server"> <java jar="lib/selenium-server.jar" fork="true"> <arg line="-firefoxProfileTemplate ${selenium}/profile/" /> </java> </target> |
[p=30, 2, left]runTestNG 任务的详细内容定义在清单 9 中。testng 任务的常用属性包括 outputDir 和 xmlfileset。属性 outputDir 用于设置输出报告位置。属性 xmlfileset 用于包含启动 XML 文件。更多选项请参考 TestNG 正式网站。[/p]51Testing软件测试网N.wz-C e1c] n.H
清单 9. 运行测试用例的 Ant 任务51Testing软件测试网8szF$pO
<target name="runTestNG"> <testng outputDir="${testng.report.dir}" sourcedir="${build}" classpathref="run.cp" haltOnfailure="true"> <xmlfileset dir="${build}" includes="testng.xml" /> </testng> </target> |
7\g}D*?C*j _,L0 [p=30, 2, left]stop-server 任务的详细内容定义在清单 10 中。[/p]51Testing软件测试网lFs `m5B)k&k }
清单 10. 停止 Selenium 服务器的 Ant 任务51Testing软件测试网`a&?"m V!DB
<target name="stop-server"> <get taskname="selenium-shutdown" src="http://localhost:4444/selenium-server/driver/?cmd=shutDown" ignoreerrors="true" /> <echo taskname="selenium-shutdown" message=" Errors during shutdown are expected" /> </target> |
[p=30, 2, left]上面列出了关键任务。将它们组合到您的构建文件,以便利用 Ant 完成良好集成的测试。[/p]51Testing软件测试网D\.QW,TR
[p=30, 2, right]回页首[/p][p=30, 2, left]如何支持测试 HTTPS 网站[/p][p=30, 2, left]随着互联网日益强调信息安全,越来越多的 web 应用程序在使用 SSL 身份认证。Selenium IDE 默认支持 HTTPS,但是 Selenium RC 不是这样的。Internet Explorer 和 Firefox 中的解决方案各不相同。[/p][p=30, 2, left]对于 IE,在 setup 目录下的 SSL 支持文件夹中在安装一个证书。如果使用的版本早于 Selenium-RC 1.0 beta 2,请使用 *iehta 运行模式,对于 Selenium-RC 1.0 beta 2 或更晚的版本,使用 *iexplore 运行模式。[/p][p=30, 2, left]如果测试 HTTPS 网站时出现一个如下所示的安全警告,那么单击 View Certificate 并安装 HTTPS 网站的证书。如果继续弹出警告,那么考虑在 IE 中进行配置。打开 Tool > Internet Options > Advanced,并取消选择 security 分类下的 Warn about invalid site certificates 和 Check for publisher's certificate revocation。[/p]51Testing软件测试网,|)L_"]2v9H-c.z
图 5. 测试 HTTPS 网站时的安全警告51Testing软件测试网9?.^)_3I-Oj
2BU]Or~KF0 51Testing软件测试网&[1{;L/~snQ
[p=30, 2, left]创建新的 Firefox 配置文件[/p][p=30, 2, left]对于 Firefox,遵循以下步骤创建定制的配置文件,然后重启服务器:[/p]
- 关闭任何正在运行的 Firefox 实例。
- 利用配置文件管理器 firefox -ProfileManager 启动 Firefox。
- 创建一个新的配置文件。出现提示时,为配置文件选择一个目录。将它放在项目文件夹里面。
- 选择配置文件并运行 Firefox。
- 利用您将用于测试的自签名证书导航到 HTTPS URL。 出现提示时接受证书。这将在配置文件中创建一个异常。
- 关闭浏览器。
- 转到 Firefox 配置文件目录。
- 删除该目录中除 cert_override.txt 和 cert8.db 文件之外的任何东西。
[p=30, 2, right]回页首[/p][p=30, 2, left]如何高效地认识不带 ID 属性的 web 元素[/p][p=30, 2, left]使用一个有含义的 ID 或名称是一种高效且方便的定位元素的方式。它也可以改善测试用例的可读性。但是为了每个元素具有一个有含义的、惟一的 ID(尤其是动态元素),Selenium 提供多种策略来认识元素,比如说 Xpath、DOM 和 CSS。[/p][p=30, 2, left]下面是一个样例,使用三种策略来定位图 6 中提供的动态表格中的一个元素。HTML 代码在清单 11 中。[/p]
fq9]s)^/H0 图 6. 动态表格样例51Testing软件测试网*cyH#U6p+F
7S#^Qr$b(Z`^0 51Testing软件测试网$zr0[A {'f[|xy G#}