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

时间:2016-12-06 12:09:03

标签: selenium selenium-webdriver

我自动化了我的网络项目的功能。我使用selenium Webdriver创建了一个测试套装,它在Local Server上工作正常(在同一个上创建)。但是,虽然我在Azure服务器上执行相同操作(与本地环境相比显然速度慢),但脚本失败了,我需要调试整个脚本,并需要花些时间等待定位元素。并且在天蓝服务器上的所有更改之后,它在本地服务器上也会失败。

如何处理网站响应缓慢?

是否有任何有效的脚本编写方法,在不同的环境中执行脚本所需的工作量较少?

2 个答案:

答案 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进行页面转换和任何动态页面更改。等待页面的元素或动态部分加载后,您可以与页面进行交互,而无需担心速度。这可能会解决你的大多数问题,但没有更多具体细节,很难说还有什么可能会发生。