Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Selenium——当驱动程序';在web应用程序中导航时,当前url不会快速更新_Java_Selenium_Automation_Selenium Webdriver - Fatal编程技术网

Java Selenium——当驱动程序';在web应用程序中导航时,当前url不会快速更新

Java Selenium——当驱动程序';在web应用程序中导航时,当前url不会快速更新,java,selenium,automation,selenium-webdriver,Java,Selenium,Automation,Selenium Webdriver,我正在使用PageObject模型开发一个测试框架,我有一个实例,在新页面的url可用之前需要一些时间 场景是这样的:用户正在创建一个新对象。它们提供对象的名称,然后单击按钮转到新对象的编辑页面 我想使用单击按钮时加载的url构造一个EditPage对象。单击按钮后,驱动程序的当前url将更新为编辑页面的新url需要一段时间 在Selenium 2中,处理这种情况的干净、可靠的方法是什么?到目前为止,我只遇到了页面上没有加载特定元素的问题,但这是我第一次遇到驱动程序的当前url需要等待很长时间才

我正在使用PageObject模型开发一个测试框架,我有一个实例,在新页面的url可用之前需要一些时间

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

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

在Selenium 2中,处理这种情况的干净、可靠的方法是什么?到目前为止,我只遇到了页面上没有加载特定元素的问题,但这是我第一次遇到驱动程序的当前url需要等待很长时间才能更新的情况


我使用过FluentWait来处理加载速度慢的组件,并且听说过WebDriverWait。我的问题是,在这种情况下,哪一个更好?有人能举一个简单的例子来说明如何处理一个很难获得的URL吗?我想要一个解决方案,它不需要CreatePage了解EditPage上的任何元素,因此,等待EditPage上的元素可见的策略违反了封装原则。

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

在您的情况下,我认为最好的做法是让您的页面对象等待一定时间,以便URL与所讨论的页面对象的URL匹配。因此,作为加载过程的一部分,page对象可以调用如下方法:

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;
}

请注意,即使URL已更改为所需的URL,也不意味着页面已完成加载。你说你不想等待一个特定的元素,我理解这一点,但是你可能想在上面的操作之后做一个简单的等待,等待body标记可见,或者确保在你第一次与页面对象的元素交互之前,你首先等待元素可见。

我在页面对象类上有机制验证是否加载了特定元素。我喜欢您验证URL是否已更新的解决方案。一旦我有了一个新的URL,我就可以创建页面对象,并使用SlowLoadableComponent的脚手架来验证是否加载了特定的元素。祝你好运