为了账号安全,请及时绑定邮箱和手机立即绑定

我的 java/selenium 项目突然出错,但元素仍然存在于 Web 应用程序中。

我的 java/selenium 项目突然出错,但元素仍然存在于 Web 应用程序中。

喵喵时光机 2023-09-13 15:33:05
我的 java/selenium 项目突然出错,但元素仍然存在于 Web 应用程序中。所以我突然收到一些奇怪的东西。直到今天早上一切都运转良好。我之前已经执行了大约 1000 次这些测试,同时前端没有发生任何改变。错误示例:org.openqa.selenium.WebDriverException:未知错误:未处理的检查器错误:{“code”:-32000,“message”:“找不到具有指定id的上下文”}或者org.openqa.selenium.TimeoutException:预期条件失败:等待存在位于以下位置的元素:By.linkText:Betalingsregeling(尝试 10 秒,间隔 500 毫秒)或者org.openqa.selenium.StaleElementReferenceException:过时的元素引用:元素未附加到页面文档(会话信息:chrome=77.0.3865.90)或者org.openqa.selenium.NoSuchElementException:没有这样的元素:无法定位元素:{“method”:“css选择器”,“selector”:“input [id * ='searchCriteria [0]'] [class * ='col -sm-8']"}(会话信息:chrome=77.0.3865.90)
查看完整描述

3 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

切换到 iframe 后,我已经修复了一些 Thread.sleep 的问题。不知道为什么切换到 iframe 后和查找元素之前的显式等待失败,我将超时设置为 15 秒,并在每个元素之前构建显式等待。显然框架内的元素突然没有足够的时间来完全加载......


 public static void switchToIFramesOfSearchPage() {

    wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));

    driver.switchTo().frame(SEARCH_PAGE_IFRAME1_ID_LOCATOR_VALUE);

    driver.switchTo().frame(SEARCH_PAGE_IFRAME2_ID_LOCATOR_VALUE);

    try {

        Thread.sleep(500);

    } catch (InterruptedException e) {

        e.printStackTrace();

    }

}


public static void switchToIFrameOfToolbar() {

    wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));

    driver.switchTo().frame(TOOLBAR_IFRAME_ID_LOCATOR_VALUE);

    try {

        Thread.sleep(500);

    } catch (InterruptedException e) {

        e.printStackTrace();

    }

}


public static void switchToIframeOfActivitiesPane(){

    wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));

    driver.switchTo().frame(ACTIVITIES_PANE_IFRAME_ID_LOCATOR_VALUE);

    try {

        Thread.sleep(750);

    } catch (InterruptedException e) {

        e.printStackTrace();

    }

}


public static void switchToIFrameOfHistoryPane() {

    wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));

    driver.switchTo().frame(HISTORY_PANE_IFRAME_ID_LOCATOR_VALUE);

    try {

        Thread.sleep(1000);

    } catch (InterruptedException e) {

        e.printStackTrace();

    }

}


public static void switchToIFrameOfImportantView(){

    wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));

    driver.switchTo().frame(IMPORTANT_VIEW_IFRAME_ID_LOCATOR_VALUE);

    try {

        Thread.sleep(1000);

    } catch (InterruptedException e) {

        e.printStackTrace();

    }

}


public static void switchToIFrameOfAccountView(){

    wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(GENERAL_IFRAME_CSS_LOCATOR_VALUE)));

    driver.switchTo().frame(ACCOUNT_VIEW_IFRAME_ID_LOCATOR_VALUE);

    try {

        Thread.sleep(1000);

    } catch (InterruptedException e) {

        e.printStackTrace();

    }

}


查看完整回答
反对 回复 2023-09-13
?
POPMUISE

TA贡献1765条经验 获得超5个赞

您只需要使用显式或隐式等待。元素在页面上可用,但无法通过 Selenium 访问,因此您必须等到它可供访问。



查看完整回答
反对 回复 2023-09-13
?
千万里不及你

TA贡献1784条经验 获得超9个赞

听起来您的网站已更改。在您通常测试的网站上用 Chrome 中的 F12 检查 ID,并确保它们仍然相同。

或者; 您可能会遇到典型的“我的应用程序整个周末都在运行,但现在周一早上速度很慢”延迟。

根据大约一半的错误,我唯一的另一个猜测是您不小心引用了较旧的 WebDriver,而不是使用您认为正在使用的 WebDriver。


查看完整回答
反对 回复 2023-09-13
  • 3 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信