При использовании CEFSharp значение раскрывающегося списка не отображается

Я пытаюсь отобразить HTML-страницу интрасети на winform, используя C# и CefSharp. Я могу открыть страницу HTML, используя экземпляр ChromiumWebBrowser. Мне также удалось заполнить некоторые текстовые поля, но установка значения для раскрывающегося списка, похоже, не работает. Фрагмент html ниже показывает выпадающий список sbo_company и текстовое поле sbo_user, которое я хочу изменить.

    <table class="sbo_layer">
     <tr>
      <td>Company</td>
      <td>
       <input value="Refresh" id="refresh_company" type="button" style="width:66px">
   <select id="sbo_company" style="width:63%"><option value="SBODEMOCL" selected="">SBODEMOCL</option><option value="SBODEMOAR">SBODEMOAR</option></select>         
   <input type="text" id="sbo_custom_company" style="display:none">
  </td>
 </tr>
 <tr>
  <td>User ID</td>
  <td><input type="text" id="sbo_user"></td>
 </tr>
</tbody></table>

Установка значения I для sbo_user работает, но настройка sbo_company не влияет на страницу. Я пытаюсь сделать следующее в C#:

public void InitializeChromium()
{
    CefSettings settings = new CefSettings();
    // Initialize cef with the provided settings

    Cef.Initialize(settings);
    // Create a browser component
    chromeBrowser = new ChromiumWebBrowser("http://x.x.x.x/");
    // Add it to the form and fill it to the form window.
    this.Controls.Add(chromeBrowser);

    chromeBrowser.Dock = DockStyle.Fill;

    //Wait for the MainFrame to finish loading
    chromeBrowser.FrameLoadEnd += (sender, args) =>
    {
        //Wait for the MainFrame to finish loading
        if (args.Frame.IsMain)
        {
            args.Frame.ExecuteJavaScriptAsync("document.getElementById('sbo_user').value = 'manager';");
            args.Frame.ExecuteJavaScriptAsync("document.getElementById('sbo_company').value = 'SBODEMOAR';");
        }
    };            
}

Когда я открываю страницу с помощью Chrome и ввожу document.getElementById('sbo_company'). Value = 'SBODEMOAR'; в консоли инструментов разработчика это работает. Как мне установить это с CefSharp? Но это работает, если я добавлю Thread.Sleep так:

if (args.Frame.IsMain)
                {
                    Thread.Sleep(2000);
                    args.Frame.ExecuteJavaScriptAsync("document.getElementById('sbo_user').value = 'manager';");
                    args.Frame.ExecuteJavaScriptAsync("document.getElementById('sbo_company').value = 'SBODEMOAR';");
                }

Есть ли какое-то более чистое решение? Кажется, это проблема времени.

0 ответов

Это работает для меня, надеюсь, поможет вам

string script = @"var tm = 'value select';
                  var select = document.getElementById('idOfSelect');
                  for (var i = 0; i < select.children.length; i++)
                  {
                      var v = select.children[i].text;
                      var cp = tm.localeCompare(v);
                      if (cp == 0)
                      {
                           select.children[i].selected = true;
                      }
                  }";
browser.EvaluateScriptAsync(script);
Другие вопросы по тегам