Gaurav Dixit Ответов: 0

Проблема доступа к элементам углового приложения в формах управления веб-браузером C#


Привет я использую управление веб-браузером в c# windows forms и хотите автоматизировать какой-то процесс угловой вебсайт.
Прежде всего, я пытаюсь автоматизировать процесс входа в систему, но я не могу получить имя пользователя/пароль и элемент кнопки входа в систему .
На самом деле происходит вот что - когда я вижу html в inspect element, то получаю полный html.
но когда я пытаюсь получить элементы по идентификатору , имени или любому другому способу в коде c#, то элементы управления панелью входа отсутствуют. я не совсем понимаю, что происходит. прежде чем я автоматизировал обычное приложение c#, но это первый раз, когда я автоматизирую угловое приложение.
мой код с помощью инспектировать элемент приводится ниже-

<div id="browser-warning" class="row alert-error">

<div id="wrapper" class="cover">
  <div class="alert-zone ng-isolate-scope">
  <!-- ngIf: !config.forceRemove --><div ng-if="!config.forceRemove" class="ng-scope">
    <!-- ngIf: alerts.length > 0 -->
  </div><!-- end ngIf: !config.forceRemove -->
</div>
  <!-- Main Content-->
  <!-- uiView: -->
  <div ui-view="" class="ng-scope">
  
  Start--------------------------------------------------------------------------------------------------------------------------------------------------
  <!-- Main Content-->
<div ng-switch="is_mobile_login" class="ng-scope">
  <!-- Mobile App -->
  <!-- ngSwitchWhen: true -->
  <!-- Browser -->
  <!-- ngSwitchDefault: --><div id="canvas" class="container ng-scope" style="overflow:visible;" ng-switch-default="">
    <div class="main-body row">
      <!-- Left Panel-->
      <!-- uiView: left-panel --><div ui-view="left-panel" class="span8 ng-scope">
        <div class="big-logo">
          <a href="" target="_blank">
          
          </a>
        </div>
      </div>
      <!-- uiView: form-panel --><div ui-view="form-panel" class="ng-scope">   
    <div id="login-panel" class="span8 ng-scope">
      <div class="modal-header"><div id="default-title" class="ng-binding">Welcome</div></div>
      <div class="modal-body" style="overflow:visible;max-height:100vh;">
      <div ng-show="dataLogin.instruction" class="branding-controls modal-instruction ng-binding ng-hide"></div>
      <form name="formLogin" autocomplete="off" prevent-auto-complete="true" novalidate="" class="ng-isolate-scope ng-valid-email ng-dirty ng-valid-parse ng-valid ng-valid-required">
        <div class="branding-control-group ng-hide" ng-show="dataLogin.staticUsername">
          <div class="branding-control-label">
            <span class="branding-icon-user"></span>
          </div>
          <div class="branding-controls">
            <div class="text-input text-input-standard ng-binding" style="display: inline-block; line-height: 4;"></div>
          </div>
        </div>
        <div class="branding-control-group" ng-show="!dataLogin.staticUsername">
          <div class="branding-control-label">
            <span class="branding-icon-user" ng-click="focusLoginUser()"></span>
          </div>
          <div class="branding-controls">
            <input type="email" email-validation="" id="sel-input-username" name="username" class="text-input text-input-standard ng-valid-email ng-touched ng-not-empty ng-dirty ng-valid ng-valid-required" ng-model="dataLogin.username" kw-focus="isFocusLoginUser" kw-focus-lost="loseFocusLoginUser()" placeholder="Username" tabindex="101" ng-required="!dataLogin.staticUsername" value=" " required="required">
          </div>
        </div>
        <div class="divider"></div>
        <div class="branding-control-group">
          <div class="branding-control-label">
            <span class="branding-icon-password" ng-click="focusLoginPassword()"></span>
          </div>
          <div class="branding-controls">
            <input type="password" id="sel-input-password" name="password" class="text-input text-input-standard ng-not-empty ng-dirty ng-valid-parse ng-valid ng-valid-required ng-touched" ng-model="dataLogin.password" kw-focus="isFocusLoginPassword" kw-focus-lost="loseFocusLoginPassword()" placeholder="Password" tabindex="102" required="">
          </div>
        </div>
        <div class="modal-footer">
          <div class="pull-left">
            <div ng-show="loginConfig.external_sso_label" class="ng-hide">
              <a id="sel-link-register" href="" class="pull-left ng-binding" tabindex="104"></a><br>
            </div>
            
          </div>
          <span ng-bind-html="hiddenInput | unsafe" class="ng-binding"><input type="hidden" name="AuthState" value=""></span>
          <button id="sel-btn-login" ng-click="doLogin(0)" class="btn btn-primary pull-right ng-binding" tabindex="103" ng-disabled="formLogin.$invalid">Sign in</button>
        </div>
      </form>
      </div>
    </div>
</div>
     
    </div>
  </div><!-- end ngSwitchWhen: -->
</div></div>
</div>

end-----------------------------------------------------------------------------------------------------------------------
<div class="footer">
 
</div>
<input type="hidden" id="username" value="" ng-non-bindable="">
<input type="hidden" id="authstate" value="_fe3d3e83bab2b3813edca356d6d957981cc4828" ng-non-bindable="">
<input type="hidden" id="error" value="" ng-non-bindable="">
<input type="hidden" id="challenge_message" value="" ng-non-bindable="">
<input type="hidden" id="login_type" value="" ng-non-bindable="">
<input type="hidden" id="sender" value="" ng-non-bindable="">
<input type="hidden" id="entity_id" value="" ng-non-bindable="">
<input type="hidden" id="verify_type" value="" ng-non-bindable="">
<input type="hidden" id="username_readonly" value="">
<input type="hidden" id="vc" value="" ng-non-bindable="">
<input type="hidden" id="instruction" value="" ng-non-bindable="">
<!-- preload sprites -->



но я получаю в коде c#, когда отладка-это только небольшая часть, приведенная ниже-

<div id="wrapper" class="cover">
  <div class="alert-zone ng-isolate-scope">
  <!-- ngIf: !config.forceRemove --><div ng-if="!config.forceRemove" class="ng-scope">
    <!-- ngIf: alerts.length > 0 -->
  </div><!-- end ngIf: !config.forceRemove -->
</div>
  <!-- Main Content-->
  <!-- uiView: -->
  <div ui-view="" class="ng-scope"></div>
</div>
<div class="footer">
 
</div>
<input type="hidden" id="username" value="" ng-non-bindable="">
<input type="hidden" id="authstate" value="_fe3d3e83bab2b3813edca356d6d957981cc4828" ng-non-bindable="">
<input type="hidden" id="error" value="" ng-non-bindable="">
<input type="hidden" id="challenge_message" value="" ng-non-bindable="">
<input type="hidden" id="login_type" value="" ng-non-bindable="">
<input type="hidden" id="sender" value="" ng-non-bindable="">
<input type="hidden" id="entity_id" value="" ng-non-bindable="">
<input type="hidden" id="verify_type" value="" ng-non-bindable="">
<input type="hidden" id="username_readonly" value="">
<input type="hidden" id="vc" value="" ng-non-bindable="">
<input type="hidden" id="instruction" value="" ng-non-bindable="">
<!-- preload sprites -->



может ли кто-нибудь помочь мне в этом , я серьезно понятия не имею, почему я не получаю эти элементы, приведенные ниже-

<input type="email" email-validation="" id="sel-input-username" name="username" class="text-input text-input-standard ng-valid-email ng-touched ng-not-empty ng-dirty ng-valid ng-valid-required" ng-model="dataLogin.username" kw-focus="isFocusLoginUser" kw-focus-lost="loseFocusLoginUser()" placeholder="Username" tabindex="101" ng-required="!dataLogin.staticUsername" value=" " required="required">

<input type="password" id="sel-input-password" name="password" class="text-input text-input-standard ng-not-empty ng-dirty ng-valid-parse ng-valid ng-valid-required ng-touched" ng-model="dataLogin.password" kw-focus="isFocusLoginPassword" kw-focus-lost="loseFocusLoginPassword()" placeholder="Password" tabindex="102" required="">


Что я уже пробовал:

webBrowser1.Document.InvokeScript("eval", new[] { "angular.element($('input[name=email]')).val('your@email').triggerHandler('change')" });


//foreach (HtmlElement ele in allInputs)
                //    {
                //        if (ele.Name == "username")
                //            ele.SetAttribute("Value", "");
                //        else if (ele.Name == "password")
                //            ele.SetAttribute("Value", "");
                //        if (ele.Id == "login")
                //            loginBtn = ele;
                //    }
                //    loginBtn.InvokeMember("click");

F-ES Sitecore

Все, что вы делаете для доступа к элементам веб-браузера, вероятно, действует на источник исходного загруженного документа, где элементы, к которым вы хотите получить доступ, были созданы динамически после загрузки документа. Это всего лишь предположение, хотя вы еще не показали соответствующий код.

Gaurav Dixit

Любой из условий , т. е. код создается динамично или нет, мы можем найти его в своем dom. Я не уверен, что Вы читаете мою проблему, я использую управление веб-браузером в проекте c# window form. Здесь я не получаю этих элементов

0 Ответов