我自动化了我的网络项目的功能。我使用selenium Webdriver创建了一个测试套装,它在Local Server上工作正常(在同一个上创建)。但是,虽然我在Azure服务器上执行相同操作(与本地环境相比显然速度慢),但脚本失败了,我需要调试整个脚本,并需要花些时间等待定位元素。并且在天蓝服务器上的所有更改之后,它在本地服务器上也会失败。
如何处理网站响应缓慢?
是否有任何有效的脚本编写方法,在不同的环境中执行脚本所需的工作量较少?
答案 0 :(得分:0)
您可以设置隐式等待(不太需要)或显式等待。
var driver = new ChromeDriver();
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1000));
driver.FindElement(By.XPath("your xpath")).Click();
在这种情况下,你'告诉'Selenium在搜索你想要找到的元素之前等待指定的超时。如果找不到该元素,您将收到超时错误。
var driver = new ChromeDriver();
driver.FindElement(By.XPath("your xpath")).Click();
在这种情况下,你告诉Selenium自动获取元素,所以如果找不到它,你将获得NoSuchElementException
,没有超时,因为没有时间等待元素之前本。
如果我们将它扩展到显式等待:
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分钟是Selenium轮询特定元素的最大超时时间。但是,如果您在本地环境中运行测试并且在30秒内找到该元素,那么您的测试将继续执行。在执行此操作之前,它不会等待最大超时完成。
答案 1 :(得分:0)
很可能没有时间找到元素,这可能是页面加载的速度。使用WebDriverWait
进行页面转换和任何动态页面更改。等待页面的元素或动态部分加载后,您可以与页面进行交互,而无需担心速度。这可能会解决你的大多数问题,但没有更多具体细节,很难说还有什么可能会发生。