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配合得很好.
首先,当您从Selenium v2.47.0迁移到Selenium v3.5.2时,值得一提的是,Selenium 3.x的可用性已经发生了很多变化。现在Selenium-WebDriver是W3C 推荐候选者,并且符合WebDriver W3C 编辑草案
\n\nNoSuchWindowException
类扩展NotFoundException
并在尝试时主要抛出:
WebDriver.switchTo().window(String windowName);\n
Run Code Online (Sandbox Code Playgroud)\n\n现在,有关您的用例、相关HTML和代码块的更多详细信息将为我们提供更多关于出了什么问题的想法。也许 的定义submitForm(driver)
是解决你的问题的关键。
您可以遵循以下一些最佳实践来避免NoSuchWindowException
:
driver.switchTo().window(windowHandle);
始终将WebDriverwait与ExpectedConditions方法结合使用numberOfWindowsToBe(int)
。driver.switchTo().window(windowHandle);
诱导WebDriverWait来等待页面加载完成,以便在新打开的窗口上继续您的测试步骤。titleContains(java.lang.String title)
以下是演示窗口/选项卡处理的示例代码块:
\n\npackage 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\n1531917836983 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) 归档时间: |
|
查看次数: |
241 次 |
最近记录: |