Watin - Submit button remain disabled after filling form

南笙酒味 提交于 2019-12-10 23:14:11

问题


I have a website which I need to login to automatically.
I am trying to use Watin .NET library in order to do that.
When I fill out the user name and password fields using Watin, the sumbit button remains disabled.
I tried applying many events on the other fields (KeyPress, KeyDown, KeyUp, Tab, Enter...) Nothing worked.
Pardon me for finding the button by value, but this is the only way that I found that worked.

 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();

I am getting an exception that the button is disabled.
The page which I need to login to is: https://portal.dorad.co.il/#/Login
All that I want is to find an automatic way to make the sumbit button enabled so that I can login.

Login Form Code:

<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>

回答1:


This might be due to firing of an event getting blocked. Try using:

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

This solved a similar problem for me.




回答2:


Ok. Then try to use Eval function which takes java script code. Pass the two elements to the below method and check.

    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
        { }
     }


来源:https://stackoverflow.com/questions/25037819/watin-submit-button-remain-disabled-after-filling-form

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!