2016-12-06 73 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

相關問題