我使用Selenium ChromeDriver 打开chrome浏览器,并以编程方式将网站加载到其中。
我从此NuGet安装了硒和 ChromeDrive
Install-Package Selenium.WebDriver-版本3.141.0 Install-Package Selenium.WebDriver.ChromeDriver-版本77.0.3865.4000
我有一些问题:
如果目标计算机未安装Chrome浏览器,那么我如何通过ChromeDriver捕获它?有可能吗?
当我通过ChromeDriver实例打开chrome浏览器时,浏览器正在打开带有网站的chrome浏览器,但是另一个CUI窗口正在打开,我不想看到它,或者我想隐藏此CUI窗口。如果不可能,那么我如何以最小化状态打开此CUI窗口?
当我使用FirefoxDriver时,在下面附有示例 CUI窗口截图。当我使用ChromeDriver实例时也会发生同样的情况。
当我执行此代码chromeDriver.Close();
时,打开的Chrome浏览器已关闭,但CUI窗口仍处于打开状态。因此,如果我在打开按钮上单击5次,则5 CUI窗口将随同5 chrome浏览器实例一起打开,而我必须手动关闭....我不想手动将其关闭,而是想在浏览器将其关闭时关闭被封闭...。如何实现?
如何从打开的chrome浏览器的代码中捕获chromeDriver.Close();
,或者如果用户单击chrome浏览器的交叉按钮以将其关闭?
如何在已打开的chrome浏览器中打开新标签页,而不是打开新的chrome浏览器实例。如果根本没有打开任何Chrome浏览器,那么新的Chrome浏览器将打开...如何通过代码实现。下面的代码总是打开新的chrome浏览器。
chromeDriver = new FirefoxDriver(options);
chromeDriver.Navigate().GoToUrl("https://www.google.com");
当我使用chrome驱动程序时会发生另一个问题。它会打开chrome浏览器,但会在浏览器上显示一条通知,例如 Chrome正在由自动测试软件控制
我搜索了google以将其隐藏,发现有人说要使用此选项
options.setExperimentalOption("excludeSwitches", new String[] { "enable-automation" });
最后,该功能不可用 setExperimentalOption ,该怎么办?
请明智地提供示例代码。
答案 0 :(得分:1)
对于问题2,3,您可以使用以下代码 (使用 DriverService.Dispose(); 手动处理驱动程序服务):
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace MyProject
{
public class Browser : IDisposable
{
bool disposed = false;
IWebDriver Driver;
public Browser()
{
//Chrome Driver copied on startup path
ChromeDriverService driverService = ChromeDriverService.CreateDefaultService(Application.StartupPath, "chromedriver.exe");
//hide driver service command prompt window
driverService.HideCommandPromptWindow = true;
ChromeOptions options = new ChromeOptions();
//hide browser if you need
//options.AddArgument("headless");
//or this to hiding browser
//options.AddArgument("--window-position=-32000,-32000");
//On offer Dona bhatt for disable automated test notification
options.AddExcludedArgument("enable-automation");
//options.AddArgument("disable-infobars");
Driver = new ChromeDriver(driverService, options);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposed)
return;
if (disposing)
{
Driver.Close();
Driver.Quit();
Driver.Dispose();
DriverService.Dispose();
}
disposed = true;
}
//this method for navigation
public string Navigate(string url)
{
string page = string.Empty;
try
{
Driver.Navigate().GoToUrl(url);
page =Driver.PageSource;
}
catch
{
}
return page;
}
//this method for wait to an element be visible by element ID
private void WaitUntilLoad(string id, int timeOut)
{
WebDriverWait waitForElement = new WebDriverWait(Driver, TimeSpan.FromSeconds(timeOut));
try
{
waitForElement.Until(ExpectedConditions.ElementIsVisible(By.Id(id)));
}
catch (WebDriverTimeoutException e)
{
}
}
}
}
使用此类:
using(Browser brw=new Browser())
{
string pageSource=brw.Navigate("My URL");
}
答案 1 :(得分:0)
我无法将其发布为评论,因为它太长了。我认为这个问题不在您的讨论范围内,但我只是在评论您的项目时留下了评论...
这似乎很广泛。您是否有任何特定问题?所有这些似乎都是您可以研究和发现的事物。
1)必须下载chrome驱动程序,并随您的应用程序一起提供。
2)可能可以隐藏该窗口,但不确定为什么这将是一个困难的要求。我要说的是,默认情况下您不能阻止窗口显示。
3)您将必须通过.net代码关闭chrome窗口。硒不会足够优雅地终止所有镀铬窗口。
4)我不确定您要什么。有什么问题?
5)我认为在浏览器之间制表符可能有很大的不同,硒可能不是本机支持的。可能会有一些chrome驱动程序命令可以帮助您,但我不知道它们是什么。
6)同样,这通常不是首选的体验,我猜您的一个软件包与您正在使用的软件包具有不同的功能集。