2016-01-06 18 views
0

我有很多测试用例,我需要等到页面加载。由于加载时间不同,我使用显式等待。使用wait.until抛出System.InvalidOperationException:没有指定会话ID

WebDriverWait _wait = new WebDriverWait(Drivers._driverInstance, new TimeSpan(0, 2, 0)); 
_wait.Until(D => D.Title); 

它抛出没有会话ID异常。我有一张表需要时间加载页面,所以我尝试使用

_wait.Until(ExpectedConditions.ElementIsVisible(By.TagName("table"))); 

即使这会抛出相同的错误。当我单独运行每一个测试并运行所有测试时,测试会通过套件引发此异常。

private static void InitialUpload(string filename) 
    { 
     SDDirectPage.filePath = filename; 
     SDDirectPage.filename = Path.GetFileNameWithoutExtension(SDDirectPage.filePath); 
     SDDirectPage.UploadButton.Click(); 
     Drivers._driverInstance.SwitchTo(); 
     SDDirectPage.FileReference = SDDirectPage.filename; 
     SDDirectPage.UploadTheFile(); 

     //Check whether 404 occurred or the uploading file is smooth 
     if (Drivers._driverInstance.Title == "404 - File or directory not found.") //A bug at the moment, it uploads corrupted files most of the times. 
     { 
      Assert.Fail("404 error occurred. File might be corrupted or file mightnot be in the specified location..!"); 
      return; 
     } 
     else 
     { 
      Drivers._driverInstance.SwitchTo().ParentFrame(); 
      // SDDirectPage._wait.Until(D => D.Title); 
      SDDirectPage._wait.Until(ExpectedConditions.ElementIsVisible(By.TagName("table"))); 

      Assert.AreEqual(SDDirectPage.filename + " - SmartDebit Front End Portal", Drivers._driverInstance.Title); 
     } 
    } 

这是我得到例外的功能。在一些测试案例中,我有Assert.AreEqual,我在那里比较标题。在这些测试案例中,driver.Title会产生相同的错误。

这里是个例外:

Test FullName: SDTestAutomation.SDDirectPage_Tests.FixInvalidRows_Search 
Test Source: c:\Git\AutomationTest\automationtest\AutomationTest\SDTestAutomation\SDDirectPage_Tests.cs : line 249 
Test Outcome: Failed 
Test Duration: 0:02:19.2199494 

Result Message: 

Test method SDTestAutomation.SDDirectPage_Tests.FixInvalidRows_Search threw exception: 
System.InvalidOperationException: No session ID specified 
Result StackTrace: 
at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse) 
    at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters) 
    at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(String mechanism, String value) 
    at OpenQA.Selenium.Remote.RemoteWebDriver.FindElementByTagName(String tagName) 
    at OpenQA.Selenium.By.<>c__DisplayClass1a.<TagName>b__18(ISearchContext context) 
    at OpenQA.Selenium.By.FindElement(ISearchContext context) 
    at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(By by) 
    at OpenQA.Selenium.Support.UI.ExpectedConditions.<>c__DisplayClass13.<ElementIsVisible>b__12(IWebDriver driver) 
    at OpenQA.Selenium.Support.UI.DefaultWait`1.Until[TResult](Func`2 condition) 
    at SDTestAutomation.SDDirectPage_Tests.InitialUpload(String filename) in c:\Git\AutomationTest\automationtest\AutomationTest\SDTestAutomation\SDDirectPage_Tests.cs:line 483 
    at SDTestAutomation.SDDirectPage_Tests.FixInvalidRows_Search() in c:\Git\AutomationTest\automationtest\AutomationTest\SDTestAutomation\SDDirectPage_Tests.cs:line 250 

这里是驱动程序类:

public class Drivers 
{ 
    static string path = @"C:\SmartDebit\SmartDebitTestAutomation\SmartDebitFramework\DriverResources\"; 

    public static IWebDriver _driverInstance { get; set; } 

    public static void Initialize(string browser) 
    { 
     if (browser == "FF") 
     { 
      _driverInstance = new FirefoxDriver(); 
      _driverInstance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5000)); 
     } 

     if (browser == "IE") 
     { 
      _driverInstance = new InternetExplorerDriver(path); 
      _driverInstance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5000)); 
     } 

     if (browser == "Chrome") 
     { 
      _driverInstance = new ChromeDriver(path); 
      _driverInstance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5000)); 
     } 

    } 
} 

代码用于初始化浏览器实例:

[ClassInitialize] 
    public static void BrowserInstance(TestContext t) 
    { 
     loginPage = new LoginPage(); 
     loginPage.Init("FF"); 
     loginPage.Goto("url of the application"); 
     Assert.AreEqual("Login Page", Drivers._driverInstance.Title, "Login page titles doesn't match"); 
    } 

    [TestInitialize] 
    public void Init() 
    { 
     try 
     { 
      Login(); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Exception:" + ex); 
      Assert.Fail("ValidLogin() test failed in HomePage_Tests.cs"); 
      loginPage.QuitBrowser(); 
     } 
    } 

    private static void Login() 
    { 
     loginPage.LoginName = "username"; 
     loginPage.Password = "password"; 
     loginPage.LoginButton(); 
     SDDirectPage._wait.Until(d=>Drivers._driverInstance.Title); 
     Assert.AreEqual("Home Page - Front End Portal", Drivers._driverInstance.Title, "Home page title doesn't match"); 
     Assert.IsTrue(HomePage.loggedInUserText.Contains("username")); 
    } 

我使用的是Firefox 43.0。 2 有人可以帮助克服这种情况。 谢谢。

回答

0

System.InvalidOperationException: No session ID specified occurs当您在该方法中没有有效的驱动程序实例时。

请检查Drivers._driverInstance已在您的代码中正确实例化。如果可能,请在问题中发布Drivers课程的相关部分。

参考另一个SO问题,其中同样的问题进行了讨论:Disabling browser javascript with Selenium webdriver + specflow + c# + Pageobject + pagefactory

+0

我已经添加了司机班。如果您需要更多代码示例,请告诉我。 – Sudeepthi

0

我基本上是从Java,但是观察代码和异常,我除外WebDriverWait在SDDirectPage定义和调用here.right?

SDDirectPage._wait.Until(ExpectedConditions.ElementIsVisible(By.TagName("table"))); 

当您调用定义的等待方法时,您未在此处传递webdriver实例。所以我期待切换到这个方法驱动程序失去会话。为了确认起见,可以尝试通过评论此等待行执行相同的(和我使用的东西等同于了Thread.sleep(5000)在Java进行一次检查这个问题)

感谢

+0

我添加了用于创建浏览器实例的代码。我尝试使用隐式等待。它通过了一些测试。我所有的测试都在等待,直到等待。 – Sudeepthi

+0

而不是此SDDirectPage._wait.Until(ExpectedConditions.ElementIsVisible(By.TagName(“table”)));使用这样的东西(在Java中)WebDriverWait等待=新的WebDriverWait(webDriver,5); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(“xpath_to_search_textbox”))); –

+0

我在全局声明了wait元素,并在需要时使用它。 WebDriverWait _wait = new WebDriverWait(Drivers。_driverInstance,新的TimeSpan(0,2,0));我会尝试从ElementIsVisible更改为VisibilityOfElementLocated。希望我可以使用Tagname而不是Xpath。问题是,表格有时需要30分钟到2分钟以上。这就是我想要使用的原因,而不是隐含的等待。 – Sudeepthi

相关问题