nosuchwindowexception selenium with phantomjs java

Ram*_*dam 9 java selenium webdriver phantomjs selenium-webdriver

我使用无头panthom浏览器使用phantomjs驱动程序与selenium自动化应用程序.(selenium java version 3.5.2和phantomjs.exe)

我有一个场景,我将填写表格并提交它,然后浏览器关闭,关闭浏览器后,我重新使用驱动程序引用来获取URL.当我使用带有selenium 2.47.0的firefox驱动程序时,它运行良好.

现在我切换到selenium phontamjsdriver和phantombrowser.这里当我调用driver.get(url);在浏览器关闭后,它抛出nosuchwindowexception,说窗口关闭或不活动.但是,相同的代码正在使用firefox驱动程序

例:

driver.get(url);// first time works  
submitForm(driver);//browser window gets closed.  
driver.get(url); 
Run Code Online (Sandbox Code Playgroud)

最后一行是抛出异常:

nosuchwindowexception(selenium java with 3.5.2 version and phantomjs.exe). 
Run Code Online (Sandbox Code Playgroud)

但与firefoxbrowser与selenium 2.4.7配合得很好.

Deb*_*anB 0

首先,当您从Selenium v​​2.47.0迁移到Selenium v​​3.5.2时,值得一提的是,Selenium 3.x的可用性已经发生了很多变化。现在Selenium-WebDriverW3C 推荐候选者,并且符合WebDriver W3C 编辑草案

\n\n
\n\n

没有这样的窗口异常

\n\n

NoSuchWindowException类扩展NotFoundException并在尝试时主要抛出:

\n\n
WebDriver.switchTo().window(String windowName);\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,有关您的用例、相关HTML代码块的更多详细信息将为我们提供更多关于出了什么问题的想法。也许 的定义submitForm(driver)是解决你的问题的关键。

\n\n
\n\n

最佳实践

\n\n

您可以遵循以下一些最佳实践来避免NoSuchWindowException

\n\n
    \n
  • 始终将父窗口句柄存储在变量中,以便您可以根据通常需要遍历回父窗口。
  • \n
  • 在调用之前,driver.switchTo().window(windowHandle);始终将WebDriverwait与ExpectedConditions方法结合使用numberOfWindowsToBe(int)
  • \n
  • 一旦您与ExpectedConditions方法结合调用driver.switchTo().window(windowHandle);诱导WebDriverWait来等待页面加载完成,以便在新打开的窗口上继续您的测试步骤titleContains(java.lang.String title)
  • \n
  • 要切换回父窗口,请使用先前存储的windowhandle
  • \n
  • 以下是演示窗口/选项卡处理的示例代码块:

    \n\n
    package demo;\n\nimport java.util.Set;\n\nimport org.openqa.selenium.JavascriptExecutor;\nimport org.openqa.selenium.WebDriver;\nimport org.openqa.selenium.firefox.FirefoxDriver;\nimport org.openqa.selenium.support.ui.ExpectedConditions;\nimport org.openqa.selenium.support.ui.WebDriverWait;\n\npublic class WINDOW_HANDLE_ITERATE_Firefox \n{\n    public static void main(String[] args) throws Exception \n    {\n        System.setProperty("webdriver.gecko.driver", "C:\\\\Utility\\\\BrowserDrivers\\\\geckodriver.exe");\n        WebDriver driver =  new FirefoxDriver();\n        driver.get("http://www.google.com");\n        String parent_window = driver.getWindowHandle();\n        System.out.println("Parent Window Handle is: "+driver.getWindowHandle());\n        System.out.println("Page Title is: "+driver.getTitle());\n        ((JavascriptExecutor) driver).executeScript("window.open(\'http://facebook.com/\');");\n        new WebDriverWait(driver,10).until(ExpectedConditions.numberOfWindowsToBe(2));\n        Set<String> allWindows_1 = driver.getWindowHandles();\n        System.out.println("Total Windows: "+allWindows_1.size());\n        for(String hand1:allWindows_1)\n        if(!parent_window.equals(hand1))\n        {\n            driver.switchTo().window(hand1);\n            new WebDriverWait(driver,10).until(ExpectedConditions.titleContains("Facebook"));\n            String first_child_window = driver.getWindowHandle();\n            System.out.println("First Child Window Handle is: "+first_child_window);\n            System.out.println("First Child Window Page Title is: "+driver.getTitle());\n            driver.close();\n        }\n        driver.switchTo().window(parent_window);\n        System.out.println("Current Window Handle is : "+driver.getWindowHandle()+ " which is same as "+parent_window +", which is the parent window handle" );\n        driver.quit();\n    }\n}\n
    Run Code Online (Sandbox Code Playgroud)
  • \n
  • 控制台输出:

    \n\n
    1531917836983   geckodriver INFO    geckodriver 0.20.1\n1531917836993   geckodriver INFO    Listening on 127.0.0.1:9993\n1531917837915   mozrunner::runner   INFO    Running command: "C:\\\\Program Files\\\\Mozilla Firefox\\\\firefox.exe" "-marionette" "-profile" "C:\\\\Users\\\\ATECHM~1\\\\AppData\\\\Local\\\\Temp\\\\rust_mozprofile.W5WqVulBNm9x"\n1531917842220   Marionette  INFO    Listening on port 35364\n1531917843126   Marionette  WARN    TLS certificate errors will be ignored for this session\nJul 18, 2018 6:14:03 PM org.openqa.selenium.remote.ProtocolHandshake createSession\nINFO: Detected dialect: W3C\nParent Window Handle is: 4294967297\nPage Title is: Google\nTotal Windows: 2\nFirst Child Window Handle is: 4294967301\nFirst Child Window Page Title is: Facebook \xe2\x80\x93 log in or sign up\nCurrent Window Handle is : 4294967297 which is same as 4294967297, which is the parent window handle\n
    Run Code Online (Sandbox Code Playgroud)
  • \n
\n