我正在遇到一个异常场景,使用chromedriver.exe和一些我在Selenium帮助下编写的单元测试。当执行使用chromedriver的第一个测试时,浏览器将启动并且测试通过。
但是,对于使用chromedriver的所有以下测试,浏览器无法成功导航到URL。
浏览器启动,暂时字符数据; 出现在地址栏中(就像在第一个有效的测试中一样),然后将正确的URL插入地址栏。但是,页面永远不会加载,您会在浏览器的正文/画布中获得标准的chrome 此网页不可用消息,其中包含两个按钮重新加载和更多
这是一个已知问题吗?
我使用以下版本:
硒:2.41.0.0
Chromedriver.exe:2.9.0.0
Visual Studio 2013:12.0.30110.00 Update 1
我的 ChromeTestDriver 类中有以下 Initialize 方法,该方法在所有测试的Setup方法(又名TestInitialize)中调用:
ChromeDriverService chromeDriverService = ChromeDriverService.CreateDefaultService(DriverPath);
var chromeOptions = new ChromeOptions();
chromeDriverService.Port = DriverPort; // 9999 - this is the port for the driver, not the webpage
webDriver = new ChromeDriver(chromeDriverService, chromeOptions);
webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
webDriver.Manage().Timeouts().SetScriptTimeout(TimeSpan.FromSeconds(10));
我在Cleanup方法(又名Teardown)中有以下代码用于所有测试:
TestDriver.CloseWindow();
TestDriver.Quit();
以下异常被搞砸了:
OpenQA.Selenium.NoSuchWindowException:没有这样的窗口:目标窗口已经关闭
如果我能提供更多信息,请告诉我。
修改 我发现在Chrome发生故障之前必须首先运行IE测试。通常,会发生以下情况。 Chrome测试运行正常。然后运行IE测试。在此之后,所有Chrome测试都会失败。
进一步修改 另一个不同寻常的方面是,一旦Chrome被Selenium玷污了网站,我就再也无法在Chrome中加载网站了。也就是说,如果我在Chrome的地址栏中手动输入网址,则会显示相同的空白页面。
甚至更奇怪,如果我跑起来Fiddler2(基本上是代理),Chrome就会变得毫无污染。它又有效了。
我确信代理不是问题,因为我的系统没有代理,当从我的系统卸载Fiddler2时会出现相同的结果。
我的客户位于不同的大陆,症状也可以重现。我们使用GIT进行合作。所以它不仅限于我的系统。
Selenium Google用户小组的用户建议在一个非常简单的场景中使用webdriver重现错误(即不作为测试框架的一部分)。以下是我创建的控制台应用程序的代码:
private static string Url = "http://localhost:5556";
static void Main(string[] args)
{
var chromeWebDriver = GetChromeWebDriver();
var nav = chromeWebDriver.Navigate();
nav.GoToUrl(Url);
Thread.Sleep(3000);
chromeWebDriver.Quit();
chromeWebDriver.Dispose();
var iedriver = GetIeDriver();
var nav1 = iedriver.Navigate();
nav1.GoToUrl(Url);
iedriver.Quit();
iedriver.Dispose();
var chromeWebDriver2 = GetChromeWebDriver();
var nav2 = chromeWebDriver2.Navigate();
nav2.GoToUrl(Url);
chromeWebDriver2.FindElement(By.LinkText("Login")).Click();
System.Threading.Thread.Sleep(2000);
chromeWebDriver2.Quit();
chromeWebDriver2.Dispose();
Console.ReadLine();
}
private static IWebDriver GetIeDriver()
{
InternetExplorerDriverService internetExplorerDriverService =
InternetExplorerDriverService.CreateDefaultService(
@"H:\BW\packages\Selenium.WebDriver.IEDriver.2.41.0.1\content");
InternetExplorerOptions internetExplorerOptions = new InternetExplorerOptions();
internetExplorerDriverService.Port = 9999;
IWebDriver webdriver = new InternetExplorerDriver(internetExplorerDriverService, internetExplorerOptions);
return webdriver;
}
private static IWebDriver GetChromeWebDriver()
{
var chromeDriverService =
ChromeDriverService.CreateDefaultService(
@"H:\BW\packages\Selenium.WebDriver.ChromeDriver.2.10.0.0\content");
var chromeOptions = new ChromeOptions();
chromeDriverService.Port = 7777;
IWebDriver chromeWebDriver = new ChromeDriver(chromeDriverService, chromeOptions);
return chromeWebDriver;
}
答案 0 :(得分:1)
试试这段代码。它很简单,它将解决您的问题。
if(browserType.equals("googleChrome")==true)
{
System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir")+"\\autoItfiles\\chromedriver.exe");
driver = new ChromeDriver();
Report.info("Google chrome browser is opened ");
}
//关闭浏览器实例。不要使用close()方法,大多数情况下它不适用于Firefox
driver.quit();
关闭将关闭当前活动窗口,如果是最后一个窗口则执行quit(),
如果您的测试失败,那么会话可能已经死亡,那么当您致电时,它不知道发送命令的位置并且没有做任何事情。
如果没有活动会话,退出将关闭所有客户端,因此如果您发送退出并且没有活动会话,它将只清理
答案 1 :(得分:0)
尝试使用Chromedriver v2.7
因为我也面临同样的问题
答案 2 :(得分:0)
您可以直接使用TestDriver.Quit();
,因为它可以达到目的,窗口会自动关闭,您的代码中不需要包含额外的方法,例如TestDriver.CloseWindow();
如果你没有处理多个打开的窗户。
答案 3 :(得分:0)
您是否为所有驱动程序指定了相同的端口?如果是这样,那很可能是导致问题的原因。在您的方案中,IEDriverServer正在侦听端口9999.然后,当您启动ChromeDriver时,它也尝试使用端口9999,但不能,因为它已经被占用,所以您得到页面未找到错误。
尝试让驱动程序检索自己的端口,这将自动找到要使用的端口,然后看看会发生什么。
答案 4 :(得分:0)
这通过指示自ChromeDriver
启动的端口号解决了我的问题,语句仅允许本地连接并指示它使用某个端口。
public static void main(String ... args){
System.setProperty("webdriver.chrome.driver", "C:\\chromedriver\\2.16\\chromedriver.exe");
ChromeDriverService.Builder builder = new ChromeDriverService.Builder();
ChromeDriverService srvc = builder.usingDriverExecutable(new File("C:\\chromedriver\\2.16\\chromedriver.exe"))
.usingPort(9515).build();
try {
srvc.start();
} catch (IOException e) {
e.printStackTrace();
}
//Execute your test-script commands
WebDriver driver = new ChromeDriver(srvc);
driver.get("http://www.google.com");
WebElement searchBox = driver.findElement(By.name("q"));
searchBox.sendKeys("Chrome Driver");
}
答案 5 :(得分:0)
我遇到了同样的问题,因为我使用的是错误的ChromeDriver。如果您从官方网站http://www.seleniumhq.org/download/从第三方浏览器驱动程序下载驱动程序,效果会更好。