我在使用Selenium Web驱动程序自动化Web应用程序时遇到问题。
网页上有一个按钮,单击该按钮会打开一个新窗口。当我使用以下代码时,它会抛出OpenQA.Selenium.NoSuchWindowException: No window found
OpenQA.Selenium.NoSuchWindowException: No window found
WebDriver.FindElement(By.Id("id of the button that opens new window")).Click(); //Switch to new window _WebDriver.SwitchTo().Window("new window name"); //Click on button present on the newly opened window _WebDriver.FindElement(By.Id("id of button present on newly opened window")).Click();
为了解决上述问题,我Thread.Sleep(50000);在按钮单击和SwitchTo语句之间添加了内容。
Thread.Sleep(50000);
SwitchTo
WebDriver.FindElement(By.Id("id of the button that opens new window")).Click(); Thread.Sleep(50000); //wait //Switch to new window _WebDriver.SwitchTo().Window("new window name"); //Click on button present on the newly opened window _WebDriver.FindElement(By.Id("id of button present on newly opened window")).Click();
它解决了问题,但是我不想使用该Thread.Sleep(50000);语句,因为如果窗口花费更多时间打开,则代码可能会失败,并且如果窗口快速打开,则会不必要地降低测试速度。
有什么方法可以知道何时打开窗口,然后测试可以恢复执行?
在控件中进行任何操作之前,您需要将其切换到弹出窗口。通过使用它可以解决您的问题。
在打开弹出窗口之前,获取主窗口的句柄并保存。
String mwh=driver.getWindowHandle();
现在尝试通过执行一些操作来打开弹出窗口:
driver.findElement(By.xpath("")).click(); Set s=driver.getWindowHandles(); //this method will gives you the handles of all opened windows Iterator ite=s.iterator(); while(ite.hasNext()) { String popupHandle=ite.next().toString(); if(!popupHandle.contains(mwh)) { driver.switchTo().window(popupHandle); /**/here you can perform operation in pop-up window** //After finished your operation in pop-up just select the main window again driver.switchTo().window(mwh); } }