【问题标题】:Watin - Submit button remain disabled after filling formWatin - 填写表格后提交按钮保持禁用状态
【发布时间】:2014-07-30 13:16:11
【问题描述】:

我有一个需要自动登录的网站。
我正在尝试使用 Watin .NET 库来做到这一点。
当我使用 Watin 填写用户名和密码字段时,sumbit 按钮仍然处于禁用状态。
我尝试在其他字段(KeyPress、KeyDown、KeyUp、Tab、Enter...)上应用许多事件。没有任何效果。
请原谅我按值查找按钮,但这是我发现可行的唯一方法。

 var field = ie.TextField(Find.ByName("userName"));
 field.TypeText("username");
 field.KeyDown();
 field.KeyUp();            

 field = ie.TextField(Find.ByName("password"));
 field.TypeText("pwd");
 field.KeyDown();
 field.KeyUp();

 ie.Button(Find.ByValue("התחבר")).Click();

我收到一个按钮被禁用的异常。
我需要登录的页面是: https://portal.dorad.co.il/#/Login
我想要的只是找到一种自动方式来启用 sumbit 按钮,以便我可以登录。

登录表单代码:

<form class="span5 offset4 loginForm ng-pristine ng-invalid ng-invalid-required" name="loginForm" ng-submit="doLogin()" autocomplete="off">
    <h2>
       Login
    </h2>
    <fieldset>
        <div class="control-group">
            <label class="control-label" for="fullName">
               User Name
            </label>
            <div class="controls">
                <input name="userName" id="useName" ng-required="true" type="text" ng-model="user.userName" auto-fill-sync="" autocomplete="off" class="ng-pristine ng-invalid ng-invalid-required" required="required">
                <span class="alert alert-error" ng-show="loginForm.userName.$error.required &amp;&amp; loginForm.userName.$dirty" style="display: none;">
                    Mandatory Field
                </span>
            </div>
        </div>
        <div class="control-group">
            <label class="control-label" for="emailAddress">
               Password
            </label>
            <div class="controls">
                <input name="password" id="password" type="password" ng-model="user.password" auto-fill-sync="" ng-required="true" autocomplete="off" class="ng-pristine ng-invalid ng-invalid-required" required="required">
                <span class="alert alert-error" ng-show="loginForm.password.$error.required &amp;&amp; loginForm.password.$dirty" style="display: none;">
                    Mandatory Field
                </span>
            </div>
        </div>
    </fieldset>
    <input type="submit" class="btn" value="התחבר" ng-disabled="loginForm.$invalid" disabled="disabled">
</form>

【问题讨论】:

  • 您是否检查过是否有用户名和密码的更改事件。如果是这样,输入用户名密码后,则触发更改事件。另外,是否可以发布html内容,因为我无法查看您发布的链接。
  • 当我点击页面“查看源代码”时,我看不到用户名/密码字段,但是当我点击一个字段,然后点击“检查元素”时,我可以找到这些字段,所以我不明白他们藏在哪里……
  • 看我上面粘贴的表格
  • HTML 没有问题。在我看来,在文本字段中输入文本后会发生一些 java 脚本验证。如果两个字段中的数据都正确,则提交按钮将被启用。所以我猜输入的数据可能不正确。
  • 这不是真的,我有正确的数据,但我也尝试在每个字段上手动输入一个字符 - 并且该按钮已启用。但是当 Watin 自动插入内容时,一些 javascript 事件不会被触发。我只是无法看到它是哪个事件!

标签: javascript .net web watin


【解决方案1】:

这可能是由于触发的事件被阻止。 尝试使用:

Element fg = ie.TextField(Find.ByName("password"));
fg.DomContainer.RunScript("$('#"+fg.id+'").change();");

这为我解决了类似的问题。

【讨论】:

    【解决方案2】:

    好的。然后尝试使用带有 java 脚本代码的 Eval 函数。将这两个元素传递给下面的方法并检查。

        private void ChangeAndBlur(Element element)
        {
            try
            {
                element.DomContainer.Eval(string.Format("$('#{0}').change()", element.Id));
                element.DomContainer.Eval(string.Format("$('#{0}').blur()", element.Id));
            }
            catch
            { }
         }
    

    【讨论】:

    • 感谢您的帮助。我试过了,但没有用。
    猜你喜欢
    • 2013-10-14
    • 1970-01-01
    • 2011-01-11
    • 2014-09-04
    • 2012-12-05
    • 1970-01-01
    • 2021-05-12
    • 2013-08-29
    • 2018-07-21
    相关资源
    最近更新 更多