Selenium WebDriver语言 - 等待长时间运行的队列



我有一个用于触发长时间运行的数据队列的应用程序。通过长时间运行,我的意思是每个队列大约 12-16 小时,并且它们中的任何一个都不能并行执行。每个队列都有单独的步骤,这些步骤需要在下一个队列运行之前成功。

我已经将初始化ChromeDriver时的超时时间增加到1000分钟

webDriver == new ChromeDriver(path,options,TimeSpan.FromMinutes(1000));

我正在使用WebDriverWait在 1000 分钟后检查所有步骤是否成功。如果发生故障,我仍然需要等待 1000 分钟才能将故障告诉开发团队。

有没有更好的方法来解决这个问题?它还使我的浏览器保持打开状态 1000 分钟

关于你的问题 - 有没有更好的方法来解决这个问题?用硒,不是真的。与通过 UI 测试相比,采用不同的方法(例如 API(会更好运气。但是,这仍然是可能的,只是不理想。

对于这个问题,我最好的主意是设置某种控制器来管理您的 WebDriver 实例并跟踪 12-16 小时的队列时间。由于我没有关于您的项目架构或您正在测试的队列的任何具体信息,因此这将是一个非常通用的实现。

下面是一个简单的 DriverManager 类,用于控制创建和终止 WebDriver 会话:

public class DriverManager
{
public IWebDriver CreateDriver
{
// code to initialize your WebDriver instance here
}
public void CloseWebDriverSession
{
Driver.Close();
Driver.Quit();
}
}

接下来,下面是一个测试用例实现,它利用 DriverManager 根据需要关闭并重新打开 WebDriver。

public class TestBothQueues
{
// this driver instance will keep track of your session throughout the test case
public IWebDriver driver;
[Test]
public void ShouldRunBothQueues
{
// declare instance of DriverManager class
DriverManager manager = new DriverManager();    
// start a webdriver instance
driver = manager.CreateDriver();
// run the first queue
RunFirstQueue();
// terminate the WebDriver so we don't have browser open for 12 hours
manager.CloseWebDriverSession();
// wait 12 hours
Thread.Sleep(TimeSpan.FromHours(12));
// start another WebDriver session to start the second queue
driver = manager.CreateDriver();
// run the second queue
RunSecondQueue();
// terminate when we are finished
manager.CloseWebDriverSession();
}
}

关于这一点的一些注意事项:

如果要启动 WebDriver 实例以按时间间隔检查队列,也可以将此代码转换为 while 循环。例如,如果队列需要 12-16 小时才能完成,则可能需要等待 12 小时,然后每小时检查一次队列,直到可以验证队列是否已完成。那看起来像这样:


// first, wait initial 12 hours
Thread.Sleep(TimeSpan.FromHours(12));
// keep track of whether or not queue is finished
bool isQueueFinished = false;
while (!isQueueFinished);
{
// start webdriver instance to check the queue
IWebDriver driver = manager.CreateDriver();
// check if queue is finished
isQueueFinished = CheckIfQueueFinished(driver);
// if queue is finished, while loop will break
// if queue is not finished, close the WebDriver instance, and start again
if (!isQueueFinished)
{
// close the WebDriver since we won't need it
manager.CloseWebDriverSession();
// wait another hour
Thread.Sleep(TimeSpan.FromHours(1));
}
}

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新