如何为元素设置值?

时间:2013-01-14 02:29:58

标签: c# web automation watin

我正在学习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与另一个号码,但是如何?

3 个答案:

答案 0 :(得分: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 =&gt;按预期工作。

答案 1 :(得分:0)

我想象

之类的东西
var result = browserInstance.LabelField(lf => lf.GetAttributeValue("class").Contains("age_label years_old")).Children().First().Text;

答案 2 :(得分:0)

如果这是您页面上唯一的<b>标记,则可能会有效:

IE.ElementWithTag("b", Find.First());
祝你好运。