-1

我已经启动了 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/

4

2 回答 2

0

这是您的问题的解决方案:

关于解决方案的几句话:

  1. 我使用定位器时xpath html/body/div[2]/div/div/header/nav/ul/li[2]/a看起来很脆弱。linkText
  2. 一旦你使用ActionClass to ,在定位另一个元素之前build().perform()引入一点。wait
  3. 使用定位器代替元素的xpath定位器。//*[@id='menu-item-35']/alinkText
  4. xpath //*[@id='default_products_page_container']/div[3]/div[2]/form/div[2]/div[1]/span/input对我来说,看起来很脆弱的外观再次使用了逻辑上的独特性xpath
  5. 这是您自己的工作代码块,其中包含一些简单的调整:

    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();
    

让我知道这是否回答了您的问题。

于 2017-05-16T09:38:21.647 回答
0

在我看来,这是一个竞争条件错误。我自己也有这些案例,我实际上可以看到一扇窗户,但 Selenium 仍然说它不存在。

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

您还可以尝试在单击您的元素之前放置一个期望等待条件。

    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"))
于 2017-05-16T07:42:36.680 回答