2014-04-01 43 views
10

我正在使用chromedriver.exe和一些我正在用Selenium的幫助編寫的單元測試。當使用chromedriver的第一個測試執行時,瀏覽器啓動並且測試通過。Chromedriver在Selenium測試中沒有載入頁面

但是,對於使用chromedriver的所有以下測試,瀏覽器無法成功導航到URL。

瀏覽器啓動,瞬間人物數據;出現在地址欄中(如在第一次測試中那樣),然後將正確的URL插入到地址欄中。然而,頁面從不加載,你得到的標準鉻此網頁不可用消息在瀏覽器的身體/帆布與兩個按鈕重新加載更多

這是一個已知的問題?

我使用以下版本:

硒:2.41.0.0
Chromedriver.exe:2.9.0.0
的Visual Studio 2013:12.0.30110.00更新1

我有以下初始化方法在我的ChromeTestDriver類在調用方法(又名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)); 

我在清理法(又名拆解)下面的代碼爲所有測試:

TestDriver.CloseWindow(); 
TestDriver.Quit(); 

以下異常被卡住:

OpenQA.Selenium.NoSuchWindowException:沒有這樣的窗口:目標窗戶已關閉

讓我知道是否可以提供更多信息。

編輯 我注意到IE測試必須在Chrome失敗之前先運行。通常情況下, Chrome測試運行良好。然後運行IE測試。接下來,所有Chrome測試都失敗。

進一步編輯 該另一個不尋常的是,一旦有鉻硒的網站已被玷污,我不能再下載該網站在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

這看起來不像TestNG(這是我使用的)。你在測試中使用什麼?在所有測試執行後,您是否嘗試過僅執行一次「清理」操作? 從我有限的Selenium知識來看,初始化ChromeDriver的API看起來不同。我正在使用'DesiredCapabilities dc = DesiredCapabilities.chrome()''來執行init。也許這可能會幫助你。 (我知道我在這裏摘取秸稈) – Vish

+0

@Vish DesiredCapabilities API似乎適用於遠程。我正在本地運行我的測試。此外,TestNG是一個Java的東西,而我正在使用.NET。這可能是API看起來不同的原因。謝謝。 – onefootswill

+0

我不確定是否屬實 - 我在本地運行我的測試,並使用DesiredCapabilities API。好的,謝謝澄清。 – Vish

回答

0

與Chromedriver V2.7

嘗試,因爲我也面臨着同樣的問題

+0

恢復到2.7並未解決問題。謝謝。 – onefootswill

0

您可以直接使用TestDriver.Quit();,因爲它將達到目的,窗口會自動關閉,不需要在代碼中包含額外的方法,例如TestDriver.CloseWindow();如果您沒有處理多個打開的窗口。

+0

感謝您的建議,但它沒有解決問題。 Chrome頁面仍在加載,因爲_此網頁不可用_。第一個測試可行,但隨後所有使用ChromeDriver的嘗試都會獲得標準消息。 – onefootswill

+0

兩件事: 1.嘗試放置IP地址而不是本地主機,並希望它能解決問題。 2.我想知道Initialize和Cleanup方法是在Assembly,Class或Method級別實現的。 –

0

您是否爲所有驅動程序指定了相同的端口?如果是這樣,那很可能是導致問題的原因。在你的場景中,IEDriverServer正在端口9999上偵聽。然後,當你啓動ChromeDriver時,它也試圖使用端口9999,但是不能,因爲它已經被佔用了,所以你得到的頁面沒有找到錯誤。

嘗試讓驅動程序檢索自己的端口,該端口將自動查找可用的端口,然後查看會發生什麼情況。

+0

他們每個人都已經聽取了不同的端口。 9999的Chrome瀏覽器和8888的IE瀏覽器。我以前從那個陷阱中學到了東西。 – onefootswill

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();

關閉將關閉當前活動窗口,如果它是最後一個窗口然後執行退出(),

如果測試失敗該會話可能是死了,所以當你調用一個接近它不」不知道在哪裏發送命令,什麼都不做。

退出如果沒有活動的會話將會關閉所有的客戶,所以如果你發送一個退出並沒有活動的會話它只是清理

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"); 
} 
0

我有同樣的問題,這是因爲我使用了錯誤的ChromeDriver。如果您從第三方瀏覽器驅動程序從官方網站http://www.seleniumhq.org/download/下載驅動程序更好。

相關問題