2017-02-17 8 views
0

나는CefSharp GL 오류 : GL_INVALID_OPERATION : glCreateAndConsumeTextureCHROMIUM : 잘못된 사서함 이름은

[0217/000149:ERROR:gles2_cmd_decoder.cc(13988)] [.Compositor-000001C8F5CE0570]GL ERROR :GL_INVALID_OPERATION : glCreateAndConsumeTextureCHROMIUM: invalid mailbox name [0217/000149:ERROR:gles2_cmd_decoder.cc(7639)] [.Compositor-000001C8F5CE0570]RENDER WARNING: texture bound to texture unit 0 is not renderable. It maybe non-power-of-2 and have incompatible texture filtering. [0217/001125:WARNING:dns_config_service_win.cc(673)] Failed to read DnsConfig. [0217/003937:WARNING:raw_channel_win.cc(532)] WriteFile: The pipe is being closed. (0xE8) [0217/003937:WARNING:proxy_message_pipe_endpoint.cc(50)] Failed to write enqueue message to channel

코드는 다음 (ATM 응용 프로그램이 더 보인다 ... 내가 기록되는 이상한 오류를 얻고있다 그러나 함께 작동하도록 셀레늄과 CefSharp 연결 그것이 원래 목적)의보다 디버깅 :

using System; 
using System.Linq; 
using System.Windows.Forms; 
using CefSharp.WinForms; 
using OpenQA.Selenium.Chrome; 
using System.Threading; 
using System.IO; 
using OpenQA.Selenium; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
     ChromiumWebBrowser _browser; 
     private void button1_Click(object sender, EventArgs e) 
     { 

      _browser = new ChromiumWebBrowser("https://www.google.com/gmail/about/") 
      { 
       Dock = DockStyle.Fill, 
      }; 

      Thread.Sleep(1000); 
      var options = new ChromeOptions { BinaryLocation = Path.Combine(System.IO.Directory.GetCurrentDirectory().Split(new[] { "bin" }, StringSplitOptions.None)[0], @"support\cef_binary_3.2556.1368.g535c4fb_windows64_client\Release\cefclient.exe") }; 
      // options.AddArgument("no-sandbox"); 
      var cefDriver = new ChromeDriver(options); 
      cefDriver.Navigate().GoToUrl("https://www.google.com/gmail/about/"); //Somewhere here error is raised that then writes a log file and pops up alert that derails whole application 
      Thread.Sleep(1000); 
      if (isAlertPresent(cefDriver)) { 
       // cefDriver.SwitchTo().Alert().Accept(); //This fails to close opened error dialog 
      } 
     } 

     public bool isAlertPresent(ChromeDriver driver) 
     { 
      try 
      { 
       driver.SwitchTo().Alert(); 
       return true; 
      } 
      catch (NoAlertPresentException Ex) 
      { 
       return false; 
      } 
     } 
    } 
} 

답변

0

나는 ..이 UI 스레드에서 차단 함께 할 수있는 뭔가가 있었다 믿고 작품 아래

코드 승인.

using OpenQA.Selenium.Chrome; 
using System; 
using System.IO; 
using System.Linq; 
using System.Threading; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
     private async void button1_Click(object sender, EventArgs e) 
     { 

      var username = textBox1.Text; 
      var password = textBox2.Text; 

      if (new[] { username, password }.Any(o => string.IsNullOrWhiteSpace(o))) 
      { 
       label3.Text = "One of'em boxes is empty"; 
       return; 
      } 

      await PassLogin(username, password); 
     } 

     async Task PassLogin(string username, string password) 
     { 
      await Task<ChromeDriver>.Factory.StartNew(() => 
      { 
       var options = new ChromeOptions { BinaryLocation = Path.Combine(System.IO.Directory.GetCurrentDirectory().Split(new[] { "bin" }, StringSplitOptions.None)[0], @"support\cef_binary_3.2556.1368.g535c4fb_windows64_client\Release\cefclient.exe") }; 
       var cefDriver = new ChromeDriver(options); 
       return cefDriver; 
      }).ContinueWith(async cefDriverTask => 
      { 
       var cefDriver = await cefDriverTask; 
       cefDriver.Navigate().GoToUrl("https://www.google.com/gmail/about/"); 
       cefDriver.FindElementByCssSelector(".gmail-nav__nav-link.gmail-nav__nav-link__sign-in").Click(); 
       var user = cefDriver.FindElementById("Email"); 
       user.SendKeys(username); 
       cefDriver.FindElementById("next").Click(); 
       Thread.Sleep(100); 
       var pass = cefDriver.FindElementById("Passwd"); 
       user.SendKeys(password); 
       cefDriver.FindElementById("signIn").Click(); 
      }); 
     } 
    } 
}