C# - 从Windows窗体应用程序中退出Selenium IWebDriver

时间:2016-01-18 21:32:29

标签: c# user-interface selenium

如果这是一个愚蠢的问题,我很抱歉。但我是C#noob。我正在尝试创建一个程序,用户可以选择使用哪个浏览器来执行Selenium脚本。

我可以成功选择我想要的浏览器,点击START按钮,然后启动正确的浏览器。然后程序通过导航到页面来执行简单的测试操作。

我想要能做的就是点击STOP按钮并关闭浏览器。我试过搞乱搞砸了;组;特征。但我不认为我说得对。请注意,我已经取消了我的尝试;组; IWebDriver的配置,因为它根本不起作用,我不想混淆任何人。

由于

这是我的Windows窗体:`

namespace WindowsFormsApplication1
{
    public partial class MainWindow : Form
    {
        public MainWindow()
        {
            InitializeComponent();
            MyInitializeComponent();
        }

        private readonly Browser form;
        public MainWindow(Browser form)
        {
            this.form = form;
        }

        //Initiate variables
        public string selectedBrowser;

        public string selBrowser
        {
            get { return comboBoxBrowser.Text; }
        }

        private void MyInitializeComponent()
        {
            //default values here
        }

        private void buttonStart_Click(object sender, EventArgs e)
        {
            //Launch Browser
           Browser.ChooseDriver(selBrowser);
        }

                private void buttonStop_Click(object sender, EventArgs e)
        {
            //Perform the Quit operation on the Silenium driver
        }
    }
}

这是我的Program.cs:

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenQA.Selenium;
using OpenQA.Selenium.Edge;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;


namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainWindow());
        }

    }

    public class Browser
    {
        private IWebDriver _driver_;

        public IWebDriver driver
        {
            get { return _driver_; }
            set { _driver_ = driver; }
        }

        public static void ChooseDriver(string selBrowser)
        {
            //Run this if IE was selected
            if (selBrowser == "Internet Explorer")
            {
                RemoteWebDriver browserdriver = null;
                string serverPath = "Microsoft Web Driver";
                if (System.Environment.Is64BitOperatingSystem)
                {
                    serverPath = Path.Combine(System.Environment.ExpandEnvironmentVariables("%ProgramFiles(x86)%"), serverPath);
                }
                else
                {
                    serverPath = Path.Combine(System.Environment.ExpandEnvironmentVariables("%ProgramFiles%"), serverPath);
                }

                InternetExplorerOptions options = new InternetExplorerOptions();
                options.PageLoadStrategy = InternetExplorerPageLoadStrategy.Eager;
                browserdriver = new InternetExplorerDriver(serverPath, options);

                Launch(browserdriver);
            }
        }

        public static void Launch(RemoteWebDriver _driver)
        {
            //Set Page load timeout to 5 seconds
            _driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(5));

            //Navigate to URL
            _driver.Url = "http://www.outlook.com/";
        }
    }    
}

2 个答案:

答案 0 :(得分:0)

如果您必须单独使用表单和测试的代码,您可以使用以下两个选项:

  1. 使用process.Kill()

    try
    {
        foreach (Process proc in Process.GetProcessesByName("chromedriver.exe"))
        {
            proc.Kill();
        }
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    
  2. 启动cmd taskkill

    System.Diagnostics.Process process = new System.Diagnostics.Process();
    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    startInfo.FileName = "cmd.exe";
    startInfo.Arguments = "/C taskkill /f /fi \"pid gt 0\" /im chromedriver.exe";
    process.StartInfo = startInfo;
    process.Start();
    

答案 1 :(得分:0)

感谢John对此的帮助。我能够在表单类中成功运行所有代码。它仍然困扰着我,我无法弄清楚如何解决我的原始目标。所以我一直在寻找更多的例子,最后找到了我失踪的部分。

我没有在Form类中实例化Browser类。

   private void buttonStart_Click(object sender, EventArgs e)
    {
        Browser _browser = new Browser();
        _browser.GetBrowser(selBrowser); 
    }

我知道这对某人来说可能听起来像是一个简单的错误,而且容易纠正。但我只学习了一两个星期的C#,而这背后的登录让我感到茫然。也许它还没有完全理解我为什么或用这个解决方案做什么。但至少我可以继续前进。

感谢你和Buaban。我将需要该taskkill片段来杀死每次启动selenium驱动程序时打开的控制台窗口。