单击按钮后WPF应用程序启动控制台并崩溃xaml

时间:2017-11-21 23:27:16

标签: c# wpf selenium console

我创建了一个Selenium Console Bot,现在我想用WPF启动它。所以我创建了一个简单的窗口并添加了一个按钮,它应该启动我的机器人,我已经重写为WPF。它启动并运行,但它崩溃了xaml窗口并打开一个控制台(不应该发生或应该?)。然后它将控制台留空,并在Visual Studio控制台中记下它应该是什么。当我启动方法CheckItems(_driver)时会发生这种情况。任何可能的解决方我不介意启动一个控制台在后台运行,但为什么它会崩溃主窗口,所以我不能移动它或用它做任何事情?

private IWebDriver Setup(IWebDriver driver)
    {

        var option = new ChromeOptions();
        option.AddArgument("--headless");
        option.AddArgument("--silent");
        option.AddArgument("--disable-gpu");
        option.AddArgument("--log-level=3");


        var service = ChromeDriverService.CreateDefaultService();
        service.SuppressInitialDiagnosticInformation = true;


        _driver = new ChromeDriver(service, option);


        //driver.Navigate().GoToUrl("");


        _driver.Navigate().GoToUrl("urlofmychoice");
        _driver.Manage().Window.Maximize();

        _driver.Manage().Timeouts().ImplicitWait =
            TimeSpan.FromSeconds(7); // breaks in between actions taken by webDriver
        _driver.FindElement(By.XPath("/html/body/div[2]/div/a")).Click(); // click got it (need to add fake cookie)
        _driver.FindElement(By.Id("header-email"))
            .SendKeys("myemail"); // enters my login (need to make it adjustable)
        _driver.FindElement(By.Id("header-password"))
            .SendKeys("mypassword" + Keys.Enter); // enters my password (need to make it adjustable)

        var username = _driver.FindElement(By.XPath("/html/body/header/section[1]/div/div[2]/div/a/span"))
            .Text; // Get username from the site and saves to username


        tradeUrl = "ulrIneed" + username; // initialize tradeUrl


        //_driver.Navigate().GoToUrl(tradeUrl); // goes to tradeUrl


        return _driver;
    }

 private void CheckItems(IWebDriver driver)
    {

        while (true)
        {

            _driver.Navigate().GoToUrl(tradeUrl);
            var trades = _driver.FindElements(By.ClassName("rlg-trade-display-header")); // add all trades to list

            for (var i = 0; i < trades.Count; i++) // loop to check all trades
            {
                if (i == 0)

                    Console.WriteLine("\n    Active Trades: " + trades.Count);
                var text = _driver
                    .FindElement(By.XPath(
                        "/html/body/main/div/div/div/div[4]/div[" + (i + 1) + "]/div[1]/div/div/span"))
                    .Text.Split(); // reads text from trade and adjust it for the program
                var test = "Trade " + (i + 1) + " was last updated " + text[1] + " " + text[2] + " ago.";
                Console.WriteLine(test);


                var x = int.Parse(text[1]); // convert string to int to check time later

                if (text[2] == "seconds")
                    continue;


                if (text[2] == "hours" || text[2] == "hour" || text[2] == "days" || text[2] == "day" ||
                    text[2] == "month" || text[2] == "months" || x > 15)
                {
                    var element1 =
                        _driver.FindElement(By.XPath("/html/body/main/div/div/div/div[4]/div[" + (i + 1) +
                                                     "]/div[1]/a/div"));
                    var actions1 = new Actions(_driver);
                    actions1.MoveToElement(element1).Click()
                        .Perform(); // scrolls down to choosen element and clicks it


                    _driver.FindElement(By.XPath("/html/body/main/div/div/div/div[2]/a[1]"))
                        .Click(); // click choosen element


                    var element = _driver.FindElement(By.Name("btnSubmit"));
                    var actions = new Actions(_driver);
                    actions.MoveToElement(element).Click()
                        .Perform(); // scrolls down to choosen element and clicks it
                    driver.Navigate().GoToUrl(tradeUrl);
                    Thread.Sleep(2000);
                }
            }
            Thread.Sleep(15000); // wait 15 second before next loop
        }
    }




   private void BtnStart_OnClick(object sender, RoutedEventArgs e)
    {

        Setup(_driver);
        CheckItems(_driver);

    }
}

0 个答案:

没有答案