单击带有下划线的元素

时间:2013-01-11 13:03:29

标签: c# web automation watin

我正在尝试填写表单,其中的一些输入在 name id 中有下划线。我想知道这是否会导致问题。

<fieldset>
<label for="user_name">Username</label>
<div class="goodorbad">
<span id="user_name-loading" class="free-or-taken fot-loading">
<img width="24" alt="Checking…" src="/i/loading/fresh-64.gif">
Checking...
</span>
<span id="user_name-free" class="free-or-taken" title="Available">✓</span>
<span id="user_name-taken" class="free-or-taken" title="Taken">×</span>
</div>
<input id="user_name" type="text" autocomplete="off" tabindex="10" autocorrect="off" autocapitalize="off" maxlength="50" value="" name="user_name">
<div class="suggestions">
</fieldset>

出于某种原因,我无法通过 ElementId(Exception抛出ElementNotFound)找到Name

这是我到目前为止所尝试的(以下代码均无效)

browser.ElementOfType<TextFieldExtended>(Find.ByClass(new Regex("user.name"))).TypeText("gfgh");

browser.TextField(Find.ById(new Regex("user.name"))).TypeText("gfgh");

browser.TextField(Find.ById("user%5Fname")).TypeText("gfgh");

browser.ElementOfType<TextFieldExtended>("user_name").TypeText("gfgh");

browser.ElementOfType<TextFieldExtended>("user_name").Value="FFF";

browser.Table(Find.ByClass("form-table")).TextField(Find.ByClass("user_name")).TypeText("gfgh");

browser.TextField(Find.ById("user_name")).TypeText("gfgh");

2 个答案:

答案 0 :(得分:1)

如果你遇到类似的情况,请按照以下方法解决。

而不是使用TextField

 browser.TextField(Find.ById("someID")).TypeText("someText");

使用元素

 browser.Element(Find.ById("someID")).SetAttributeValue("value","someText");

像魅力一样!

答案 1 :(得分:0)

使用下划线搜索ID和名称就可以了;我一直这样做。可能的原因是您没有正确的ID或名称(&lt; - 这是最有可能的),文本框在一个框架中(不太可能),或者您没有针对正确运行的浏览器运行WatiN代码;这还包括弹出窗口和对话框。 (不太可能)。

示例HTML - 为了清晰起见,稍微更改了ID

<html>
<body>
<input name="user_name" id="user_id" value="" maxlength="50" autocapitalize="off" autocorrect="off" tabindex="10" autocomplete="off" type="text">
</body>
</html>

示例C#/ WatiN

IE myIE = new IE();
myIE.GoTo("theCorrectURL");
myIE.TextField("user_id").TypeText("Found By ID");
System.Threading.Thread.Sleep(500);  //not needed other than to watch what is happening
myIE.TextField(Find.ByName("user_name")).TypeText("Found By Name");

以上是在WatiN 2.1,IE9,Win7-64

上工作和测试的

其他说明

1)Find.ByClass(“user_name”)不会找到它,因为您的标签上没有定义CSS类。如果你有,那么可以搜索Find.ByClass(“theCssClass”)。

2)浏览器的类型将是WatiN.Core.IE(或者可能是.Firefox)如果它确实是Windows.Forms.WebBrowser我会非常惊讶。