【问题标题】:How To avoid stale element reference: element is not attached to the page document when I use a command to change the paage如何避免过时的元素引用:当我使用命令更改页面时,元素未附加到页面文档
【发布时间】:2021-09-12 12:07:07
【问题描述】:

我在使用 Ecplise 时遇到问题。当我使用命令做某件事时,我会进入另一个页面。例如,如果我执行不需要更改页面的命令,它就可以正常工作。但是当我做一个更改页面的操作时,它可以工作,但之后它会停止并且我得到那个错误。所以,有一部分代码。在暗示要转到另一个页面的第三个命令之后,接下来的两个命令不起作用。

driver.get("https://mathaus.ro");
        driver.manage().window().maximize();        
        driver.findElement(By.id("Constructii10NavNode")).click();
        driver.findElement(By.id("changeLocationReference")).click();
        driver.findElement(By.className("close-modal")).click();

【问题讨论】:

  • 当您再次回到第一页时。重新定义所有的 web 元素,否则它们会过时
  • 我该怎么做?而且,我也不会回到第一页。我转到第二页,其中有许多第一页的元素,例如我想使用的“更改地址”按钮。
  • Constructii10NavNode 这个位于左侧,而 changeLocationReference 位于右上角。当 URL 成功启动时,你能告诉我你到底想做什么。
  • 所以我只想去Constructii10NavNode页面,当我在那个页面上时,打开changeLocationReference然后关闭它。我想在这个网站上做第一个简短的测试。当我解决这个问题时,我也会添加其他内容。
  • 那么你不应该得到任何过时的元素引用。你到底从哪里得到的?

标签: java eclipse selenium webdriver


【解决方案1】:

我认为您需要显式等待:

代码:

driver.manage().window().maximize();
driver.get("https://mathaus.ro");
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.id("Constructii10NavNode"))).click();
Thread.sleep(3000);
wait.until(ExpectedConditions.elementToBeClickable(By.id("changeLocationReference"))).click();
Thread.sleep(3000);
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("div.close-modal"))).click();
Thread.sleep(3000);

PS : Thread.sleep(3000); 仅用于可视化目的。你可以删除它。真的不需要

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多