如果这是一个愚蠢的问题,我很抱歉。但我是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/";
}
}
}
答案 0 :(得分:0)
如果您必须单独使用表单和测试的代码,您可以使用以下两个选项:
使用process.Kill()
try
{
foreach (Process proc in Process.GetProcessesByName("chromedriver.exe"))
{
proc.Kill();
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
启动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驱动程序时打开的控制台窗口。