NoSuchWindowException - Selenium 3.4.0 - IE 11

我已经推出了IE 11浏览器,

我已导航到初始URL - >完成鼠标并单击链接 - >它重定向到另一个页面 .

在那个页面中,我必须单击一个按钮,但它会抛出异常

org.openqa.selenium.NoSuchWindowException:无法在关闭的窗口中找到元素

但窗户仍然在屏幕上可用 .

这是我的代码

WebElement e = driver.findElement(By.xpath(“html / body / div [2] / div / div / header / nav / ul / li [2] / a”));

Actions a = new Actions(driver);
    a.moveToElement(e).build().perform();

    driver.findElement(By.xpath("//*[@id='menu-item-35']/a")).click();



  TimeUnit.SECONDS.sleep(5);

//此后发生异常,但是当我删除下面的代码时,测试用例就会通过

driver.findElement(By.xpath("//*[@id='default_products_page_container']/div[3]/div[2]/form/div[2]/div[1]/span/input")).click();

这是页面的URL:http://store.demoqa.com/

回答(2)

2 years ago

在我看来,这是一个竞争条件错误 . 我自己有这些情况,我实际上可以看到一个窗口,但Selenium仍然说它不在那里 .

您是否尝试将睡眠时间设置为更高的值?

在单击元素之前,您还可以尝试设置expect-wait-condition .

WebDriverWait wait = new WebDriverWait(DRIVER, 20);
    wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id='default_products_page_container']/div[3]/div[2]/form/div[2]/div[1]/span/input"))

2 years ago

以下是您的问题的解决方案:

关于解决方案的几句话:

  • xpath html/body/div[2]/div/div/header/nav/ul/li[2]/a 看起来很容易让我使用 linkText 定位器 .

  • 一旦使用 Action Class到 build().perform() ,在定位另一个元素之前引出一些 wait .

  • 使用 linkText locator而不是 //*[@id='menu-item-35']/a 元素的 xpath 定位符 .

  • 再次 xpath //*[@id='default_products_page_container']/div[3]/div[2]/form/div[2]/div[1]/span/input 看起来很容易受到我使用逻辑唯一 xpath .

  • 这是您自己的工作代码块,其中包含一些简单的调整:

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
WebElement e = driver.findElement(By.linkText("Product Category"));
Actions a = new Actions(driver);
a.moveToElement(e).build().perform();
driver.findElement(By.linkText("iMacs")).click();
driver.findElement(By.xpath("//input[@name='Buy']")).click();

如果这回答你的问题,请告诉我 .