如何在Selenium脚本中管理时间以在不同服务器上执行相同的脚本



我正在自动化网络项目的功能。我使用Selenium Webdriver创建了一套测试套装,该套件在本地服务器上正常工作(在同一服务器上创建)。但是,尽管我确实在Azure服务器上执行相同的操作(显然与本地环境相比很慢),但脚本失败了,我需要调试整个脚本,并且需要等待一些时间来定位元素。毕竟,在Azure服务器上进行了所有更改,它也会在本地服务器上发生故障。

如何处理缓慢的网站响应?

是否有任何有效的脚本方法需要更少的精力来执行不同环境的脚本?

您可以设置隐式等待(不太需要)或明确等待。

var driver = new ChromeDriver();
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1000));
driver.FindElement(By.XPath("your xpath")).Click();

在这种情况下,您要"告诉"硒等待指定的超时,然后才能搜索要找到的元素。如果找不到元素,您将获得超时错误。

var driver = new ChromeDriver();
driver.FindElement(By.XPath("your xpath")).Click();

在这种情况下,您要告诉Selenium自动获取元素,因此,如果找不到它,您将获得NoSuchElementException,而没有超时,因为没有时间在元素之前等待。p>,如果我们将其扩展到明确的等待:

var driver = new ChromeDriver();
var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 1000));
wait.Until(d => d.FindElement(By.XPath("your xpath"))).Click();

在这种情况下,您要告诉Selenium继续搜索该元素,直到找到该元素,但不超过指定为WebDriverWait参数的最大超时。

让我们以当地环境在1分钟和azure上加载的情况,需要10分钟(示例),如果您要进行明确的等待,则可以设置超时假设11分钟。这11分钟是硒对特定元素进行轮询的最大超时。但是,如果您在本地环境上运行测试,并且在30秒内找到元素,则您的测试将继续执行。它不会等待最大的超时完成。

最有可能不是时间定位元素的时间,这可能是页面加载速度。使用WebDriverWait s进行页面过渡和任何动态页面更改。一旦等待页面的元素或动态部分加载,就可以与页面进行交互,而不必担心速度。这可能会照顾您的大多数问题,但是如果没有更多的细节,很难说可能会发生什么。

最新更新