Selenium Webdriver在每行代码之后等待

Selenium Webdriver在每行代码之后等待,selenium,selenium-webdriver,webdriver,Selenium,Selenium Webdriver,Webdriver,我在采访中被问到一个问题,比如 问题:我们有1000行代码,在每行webdriver都应该等待5秒之后,您将如何做到这一点 回答:您可以使用隐式等待创建一个函数,并将代码放入for循环中,每次迭代都要求运行该等待函数 他们说这不是正确的做法 你能告诉我处理这个问题的最佳方法吗…坦白地说,我会问他们强制测试至少需要83.3333分钟来执行的目的是什么 如果这是为了视觉能力,那么他们会让谁坐在那里看一个半小时的测试运行……如果是为了应用程序,那么有更好的方法来确保加载了某些内容,然后只需在所有内容上

我在采访中被问到一个问题,比如

问题:我们有1000行代码,在每行webdriver都应该等待5秒之后,您将如何做到这一点

回答:您可以使用隐式等待创建一个函数,并将代码放入for循环中,每次迭代都要求运行该等待函数

他们说这不是正确的做法


你能告诉我处理这个问题的最佳方法吗…

坦白地说,我会问他们强制测试至少需要83.3333分钟来执行的目的是什么

如果这是为了视觉能力,那么他们会让谁坐在那里看一个半小时的测试运行……如果是为了应用程序,那么有更好的方法来确保加载了某些内容,然后只需在所有内容上花费5秒钟

就注册为每个Selenium命令触发的事件而言,上面评论中olyv提供的链接是一个很好的起点


就我个人而言,我更喜欢为Selenium命令创建一个包装器,这样它就不仅仅是一个事件,而且我可以在包装器中执行任意数量的公共代码,然后在执行命令时,我只需将它推送到包装器中。有多种方法可以做到这一点,但这是附加或封装Selenium API的自定义代码。然后,实际秒数在配置文件中,便于调整。我发现这种方法在很多情况下都非常有用。

如果我们假设每一行都调用WebDriver函数,那么您可以检测函数何时被调用,并在函数完成时执行代码。例如:

@Aspect
public class WebdriverAfterAspect {

   int waitTime = 5;

   @After("regular expression that represents the name a Webdriver function")
   public void logStringArguments(String name){
      wait(waitTime);
   }    
}

你有很多例子

我建议回顾一下非常相似的问题——隐式和显式等待是处理类似要求的一种方式:我个人的观点是,这些面试问题只应该保留给快速成功的合同工作,因为你需要的是对工具的了解。全职面试不应该有这样的面试问题。