【问题标题】:Selenium chrome web-driver inconsistency in selecting a dropdown elementSelenium chrome web-driver 在选择下拉元素时不一致
【发布时间】:2020-10-07 15:38:29
【问题描述】:

我正在使用 selenium 进行自动化,但得到的结果不一致。如果有 10 个重复任务要执行,大约 6-8 个按预期运行,大约 2-3 个失败,此问题的主要原因是元素陈旧或无法在网页上找到该元素

我已经尝试了 chrome 浏览器的多种设置

driver = new ChromeDriver(cop);
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(4, TimeUnit.SECONDS);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("estblshmntSel")));
dropdown = new Select(driver.findElement(By.id("estblshmntSel"))); 

错误信息 设置建立paramsstale元素引用:元素未附加到页面文档 (会话信息:chrome=84.0.4147.125) (驱动程序信息:chromedriver=84.0.4147.30 (48b3e868b4cc0aa7e8149519690b6f6949e110a8-refs/branch-heads/4147@{#310}),platform=Windows NT 10.0.14393 x86_64)(警告:服务器未提供任何堆栈跟踪信息)

【问题讨论】:

  • DOM 可能仍在更新...可能会将项目附加到您尝试使用的选择中。您可以添加一个普通的旧睡眠,或者对有时会产生陈旧元素异常的调用进行函数化,然后尝试/捕获驱动程序调用。当捕获到过时元素异常时,您将重新运行该函数。 (陈旧元素异常非常适合了解 DOM 何时仍在更新……因此您可以重新抓取元素。)

标签: java angular selenium selenium-chromedriver


【解决方案1】:

初始化下拉元素

dropdown = new Select(driver.findElement(By.id("estblshmntSel"))); 

在重复任务的每次迭代中。每次执行任务时,DOM 都会更新,因此旧元素会在 StaleElement 中实例化较早的结果。在 selenium 中使用循环时,我曾多次遇到此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-20
    • 2021-05-04
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多