You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ext JS 3.x网站Selenium测试:慢加载XML列表获取失败求助

针对Ext JS 3.x Selenium测试中列表加载未完成的解决方案
  • 利用Ext JS自身API等待组件渲染完成
    Ext JS 3.x有独立的组件生命周期,普通DOM等待无法精准捕捉其渲染状态。通过Selenium执行JavaScript调用Ext原生API,可直接判断列表组件是否完全加载:

    var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
    wait.Until(d => (bool)((IJavaScriptExecutor)d).ExecuteScript(@"
        // 替换为你的列表组件定位逻辑(ID/xtype等)
        var dateList = Ext.ComponentMgr.get('target-date-list-id');
        if (!dateList || !dateList.rendered) return false;
        // 验证列表项数量及DOM元素存在性
        var items = dateList.items;
        if (items.length !== 70) return false;
        for (var i = 0; i < items.length; i++) {
            var itemEl = items.get(i).getEl();
            if (!itemEl || !itemEl.dom) return false;
        }
        return true;
    "));
    
  • 优化嵌套元素的定位与等待逻辑
    嵌套极深的元素避免使用冗长定位器,先定位列表根容器,再在容器内等待所有子项加载完成:

    // 定位列表容器(根据实际HTML结构调整选择器)
    var listContainer = driver.FindElement(By.CssSelector("div.x-list.your-custom-list-class"));
    // 等待容器内70个列表项全部出现
    wait.Until(d => listContainer.FindElements(By.CssSelector(".x-list-item")).Count == 70);
    

    注:Ext JS 3.x的列表项通常带有x-list-item类,可根据你的HTML结构微调选择器

  • 替换无效等待为元素状态验证
    若之前的Wait Helpers无效,可等待元素可见且文本非空(日期项渲染后会填充文本内容):

    var dateElements = wait.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(
        By.CssSelector(".x-list-item .date-text-element")
    ));
    // 额外验证每个元素的文本已加载完成
    foreach (var elem in dateElements)
    {
        wait.Until(d => !string.IsNullOrEmpty(elem.Text));
    }
    
  • 处理懒加载/滚动加载场景
    如果列表是滚动后才渲染剩余项,需模拟滚动并等待:

    var listBody = driver.FindElement(By.CssSelector("div.x-list-body"));
    // 滚动至列表底部
    ((IJavaScriptExecutor)driver).ExecuteScript(
        "arguments[0].scrollTop = arguments[0].scrollHeight", listBody
    );
    // 等待所有70项加载完成
    wait.Until(d => listBody.FindElements(By.CssSelector(".x-list-item")).Count == 70);
    

    若存在分批加载,可循环滚动直到元素数量达标。

  • 调整Selenium页面加载策略
    Ext JS是异步渲染的单页应用,默认的页面加载等待会提前结束。可设置页面加载策略为None,自行控制等待逻辑:

    var chromeOptions = new ChromeOptions();
    chromeOptions.PageLoadStrategy = PageLoadStrategy.None;
    var driver = new ChromeDriver(chromeOptions);
    

内容的提问来源于stack exchange,提问作者user1585204

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:36:07