gpt4 book ai didi

java - Selenium -- 在浏览 Web 应用程序时,如何处理驱动程序当前 url 未快速更新的情况

转载 作者:行者123 更新时间:2023-12-01 14:36:44 25 4
gpt4 key购买 nike

我正在使用 PageObject 模型来开发一个测试框架,并且我有一个实例,需要一些时间才能获得新页面的 URL。

场景是这样的:用户正在创建一个新对象。他们提供对象的名称,然后单击按钮转到新对象的编辑页面。

我想使用单击按钮时加载的 url 构造一个 EditPage 对象。单击按钮后,驱动程序的当前 URL 需要一段时间才能更新为编辑页面的新 URL。

在 Selenium 2 中,有什么干净、稳健的方法来处理这种情况?到目前为止,我只遇到过特定元素未加载到页面上的问题,但这是我第一次遇到需要长时间等待驱动程序当前 URL 更新的情况。

我已经将 FluentWait 用于加载缓慢的组件,并且我听说过 WebDriverWait。我的问题是,对于这种情况使用哪一个更好?有人可以发布一个简单的示例来说明如何处理可用缓慢的 URL?我想要一个不需要 CreatePage 了解有关 EditPage 上的元素的任何信息的解决方案,因此涉及等待 EditPage 上的元素可见的策略违反了封装原则。

最佳答案

这是一个常见问题,因为页面将等待不同的时间来加载,并且您的页面对象需要考虑到这一点。页面对象应该有一个内置的机制来等待自己在您首选的分配时间内加载,这样如果您确实抛出异常,您就知道这是因为 1) 请求的页面实际上没有显示或 2) 花费了太长时间。您可以在每种情况下抛出不同的异常,以区分测试失败的原因。

就您的情况而言,我认为最好的办法是让您的页面对象等待一定时间,以便 URL 与相关页面对象的 URL 相匹配。因此,作为加载过程的一部分,页面对象可以调用如下方法:

public PageObject WaitForURL(string url)
{
Console.WriteLine("WaitForURL : " + url);
WebDriverWait _waitForURL = new WebDriverWait(_driver, TimeSpan.FromMilliseconds(30000));
_waitForURL.Until((d) =>
{
try
{
return d.Url == url;
}
catch (Exception)
{
return false;
}
});
Console.WriteLine("URL changed to : " + _driver.Url);

return this;
}

请注意,即使网址更改为您所需的网址,也不意味着页面已完成加载。您说您不想等待特定元素,我理解这一点,但您可能希望在上述内容之后进行简单的等待,以使正文标记可见,或者确保在与页面对象的元素交互之前首先您首先等待元素可见的时间。

关于java - Selenium -- 在浏览 Web 应用程序时,如何处理驱动程序当前 url 未快速更新的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16425955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com