【问题标题】:Verify if 'Ajax Loading' image is shown or not验证是否显示“Ajax 加载”图像
【发布时间】:2014-09-24 14:08:03
【问题描述】:

我有 2 个名为 dd1 和 dd2 的下拉列表。

dd1 代表国家,dd2 代表国家。

点击 dd1 时,会发生 ajax 调用(并显示“正在加载”图像)并填充 dd2。

有没有办法确定点击 dd1 后显示的是“正在加载”图像?

所以测试用例是这样的。 1.转到页面 2.在dd1中选择“美国” - 断言加载图像是否可见 - 断言加载图像是否消失 3. 选择“德克萨斯”

我对第二步的断言感到震惊

【问题讨论】:

  • 在此处添加您的代码..这样我们就可以解决..
  • 基本上图像是一个可以处理的 HTML 元素。您可以检查该元素是否消失或请发布该图像的 HTML(加载符号)。这样任何人都可以为您获取代码。
  • 图片的 HTML

标签: c# ajax selenium selenium-webdriver


【解决方案1】:

将你的加载图片放在一个 span 或 div 中,并给它一个 ID。 更改 dd1 后,进行 Ajax 调用并显示它。
任何时候你想知道装载箱是否在那里,试着 检查能见度

$("logoContainer").is(":visible")

【讨论】:

    【解决方案2】:

    我创建了一个驱动程序覆盖,所以现在我调用 driver.WaitForPageLoad(); 并等待微调器消失并加载文档就绪状态。更多细节可以在示例链接中看到,但这里是你如何覆盖并等待微调器消失(假设微调器有一个你可以搜索的类。

    Example

    public static bool WaitForPageLoad(this IWebDriver driver)
    {
        WaitForDocumentReady(driver);
        bool ajaxReady = WaitForAjaxReady(driver);
        WaitForDocumentReady(driver);
    
        return ajaxReady;
    }
    
    private static bool WaitForAjaxReady(IWebDriver driver)
    {
        Thread.Sleep(1000);
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
        return wait.Until<bool>((d) =>
        {
            return driver.FindElements(By.CssSelector(".waiting, .tb-loading")).Count == 0;
        });
    }
    

    【讨论】:

    • 感谢您的回复。但是,我的意图不是等待等待图像加载。我的目的是检查它是否可见(即使是 1 毫秒)。如果图像根本没有加载,您提供的代码将给出 FALSE POSITIVE。如果我错了,请纠正我。
    • 在这种情况下,您仍然需要一个 WebDriverWait,但不是等到类消失(计数 == 0),而是要等到元素存在并且可见。 return driver.FindElement(By.CssSelector("css选择字符串")).Displayed;
    【解决方案3】:

    这对我有用

    wait.Until(driver => !driver.FindElement(By.Id("ControlId").Displayed);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 2012-08-22
      相关资源
      最近更新 更多