WatiN是开源的.net Web自动化测试工具。
下文中记录了一些常见的问题的处理。感谢原作者。
本人在使用WatiN时,发现其在IE9下,取
Iframe中嵌套的Iframe里的控件时,产生错误。下了源码研究了一翻,貌似是IE的问题,这里希望有高人帮助解决。
目前我采用执行JS的方法,绕过了此问题。 记录在此,希望对大家有帮助。 主要是在WatiN的源码Document类中增加了三个方法:
1
///
<summary>
2
///
给iframe中的某控件赋值
3
///
</summary>
4
///
<param name="frameId"></param>
5
///
<param name="inputId"></param>
6
///
<param name="value"></param>
7
public
virtual
void
FrameValue(
string
frameId,
string
inputId,
string
value)
8
{
9
string
js
=
string
.Format(
"
$('#{0}',$('#{1}')[0].contentWindow.document).val('{2}');
"
, inputId , frameId , value );
10
this
.RunScript(js);
11
}
12
13
///
<summary>
14
///
给iframe中的某元素改变html
15
///
</summary>
16
///
<param name="frameId"></param>
17
///
<param name="elementId"></param>
18
///
<param name="value"></param>
19
public
virtual
void
FrameHtml(
string
frameId,
string
elementId,
string
value)
20
{
21
string
js
=
string
.Format(
"
$('#{0}',$('#{1}')[0].contentWindow.document).html('{2}');
"
, elementId, frameId, value);
22
this
.RunScript(js);
23
}
24
25
///
<summary>
26
///
模拟点击iframe中的元素
27
///
</summary>
28
///
<param name="frameId"></param>
29
///
<param name="buttonId"></param>
30
public
virtual
void
FrameClick(
string
frameId,
string
buttonId)
31
{
32
string
js
=
string
.Format(
"
var btn = $('#{0}',$('#{1}')[0].contentWindow.document); btn.click();
"
, buttonId, frameId);
33
this
.RunScript(js);
34
}
35
36
///
<summary>
37
///
等待
38
///
</summary>
39
///
<param name="seconds"></param>
40
public
virtual
void
Wait(
int
seconds)
41
{
42
try
43
{
44
this
.WaitUntilContainsText(
"
无字天书无敌天下
"
, seconds);
45
}
46
catch
(Exception)
47
{
48
}
49
}
最后一个等待的方法比较丑陋,也是无耐之举,希望有高手帮助解决。
PS: 文中 的JS需要 Jquery库的支持。 无JQuery库也可实现,写法稍有差异。