2

我正在学习 Watin,遇到了一段有趣的 html 代码:

<label class="age_label years_old" for="total_age">
<b>34</b>
<span class="placeholder">How old are you?</span>
<span class="years_old">years old</span>
<span class="years_young">years young</span>
</label>

我如何达到 34?,我完全迷失了,因为我习惯于按 Id 或 Class 选择输入。但这里不是输入。它只是一个html标签。

我想使用 watin 用另一个数字SET /* REPLACE * 34,但是如何?

4

3 回答 3

1

WatiN 没有您所要求的标签值的设置器。不过,它可以很容易地通过 javascript 完成。将 JS 调用与 WatiN .GetJavascriptElementReference 结合以获取 JS 元素使您尝试做的事情变得非常简单。(我确信有一种纯粹的 JS 方法可以做到这一点,但这些天我在 WatiN 中比 JS 更好)正如希望显而易见的那样,找到第一个粗体标签是一种非常非常脆弱的方法,如果有更好的方法可以用于元素定位。

而且,如果您使用这个“setter”操作进行测试 - 这是一种难闻的气味,因为您正在更改用户无法做的事情。

示例代码

var jsRef = myIE.ElementsWithTag("b")[0].GetJavascriptElementReference();
myIE.Eval(string.Format("{0}.innerHTML = 'fred'", jsRef));

以上使用 OP 的 HTML 进行了测试,Watin 2.1、IE9、Win7-64 => 按预期工作。

于 2013-01-14T20:59:16.430 回答
0

我想像

var result = browserInstance.LabelField(lf => lf.GetAttributeValue("class").Contains("age_label years_old")).Children().First().Text;
于 2013-01-14T02:47:00.090 回答
0

如果这是您<b>页面上的唯一标签,那么这可能有效:

IE.ElementWithTag("b", Find.First());

祝你好运。

于 2013-01-14T02:51:46.050 回答