2016-12-06 60 views
0

我正在自动执行My web项目的功能。我已经使用Selenium Webdriver创建了一个测试服,它在本地服务器上工作正常(在其上创建)。但是,虽然我在Azure服务器上执行相同的操作(与本地环境相比显然很慢),但脚本失败,我需要调试整个脚本,并需要花点时间来定位元素。在Azure服务器上进行了所有更改后,本地服务器上的某些时间也失败了。如何在selenium脚本中管理时间以在不同的服务器上执行相同的脚本

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

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

回答

0

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

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

在这种情况下,您'告诉'Selenium在搜索要查找的元素之前等待指定的超时。如果找不到该元素,您将收到Timeout错误。

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

在这种情况下,你告诉硒自动获取到的元素,所以在情况下,它不会被发现,你会得到一个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(); 

在这种情况下,你告诉硒继续寻找的元素,直到它被发现,但比指定为最大超时不再一个参数为WebDriverWait

举个例子,在本地环境中,1分钟加载一个页面,在Azure上需要10分钟(远远拉伸的例子),如果你要继续显式等待,那么你可以设置暂停11分钟。 这11分钟是Selenium轮询特定元素的最大超时时间。但是,如果您在本地环境中运行测试,并且在30秒内找到该元素,则测试将继续执行。在这之前它不会等待最大超时完成。

0

这很可能没有时间来定位元素,这可能是页面加载的速度。使用WebDriverWait进行页面转换和任何动态页面更改。等待页面的元素或动态部分加载后,即可与页面交互,而无需担心速度。这可能会处理大部分问题,但没有更多细节,很难说还有什么可能发生。

+0

在一台服务器上创建整套服装,我不知道哪个元素需要更多时间才能在其他服务器上显示(因为整套服装在此处工作正常)。为此,我需要在该服务器上运行我的套装,并分析引起脚本失败的位置,并且需要通过为这些元素或其他位置放置一些显式等待来处理。所以我担心的是,我可以做些什么,我不需要额外的努力来调试不同服务器上的脚本? – NarendraR

+0

在我的情况下,提交一个表单后会显示一条通知消息。我正在根据这个信息采取其他行动。因此,在本地服务器上,每件事情都很好(不断工作),但在Azure服务器上需要更多时间来提交表单并获取消息。所以造成问题。我已经在使用'ImplicitWait' – NarendraR

+0

通过在所有服务器上运行修改我的脚本之后 - 我所做的是,实现了'Explicit wait',它导致失败,并且它现在在所有服务器上都正常工作。所以我的问题再次是,我如何分析哪里放正确的等待,因为它导致其他服务器上的问题,我在本地服务器上做了什么是好的? – NarendraR

相关问题