2015-12-17 131 views
1

我不認爲許多人使用Winium.CruciatusWinium.Desktop WebDriver實現,但如果有人也許可以幫助我或從我的解決方法中受益。在Winium.Cruciatus中查找主窗口元素

我用WebDriver實現開始我的應用程序,這樣的事情:沒有淘到整個

capabilities = { 'app' => path, 'launchDelay' => 1500 } 
driver = Selenium::WebDriver.for(:remote, 
            url: 'http://127.0.0.1:9999', 
            desired_capabilities: capabilities) 

應用程序啓動就好了我需要找到根元素能夠找到孩子自動化樹。

我曾經這樣做:

wait.until { @driver.find_element(:id, 'appid') } 

如果應用程序加載的正常工作,如果有沒有太多的窗戶打開。但是,當我打開10-15個窗口並且應用程序需要幾秒鐘才能啓動cruciatus庫時才掛起。我已經將其跟蹤到自動化庫本身,它掛起。我認爲這是由於應用程序沒有被加載,當庫閱讀元素樹時,它開始遍歷範圍中的每個元素,這需要很長的時間,最後可能會以堆棧溢出結束(according to MSDN)。

我甚至嘗試過自己修復Cruciatus實現,但由於這是枚舉元素緩慢的固有問題,即使我在Cruciatus中放置超時,它也沒有真正的幫助。

我會提供我的解決方法作爲答案,但如果任何人有更好的建議,將不勝感激?

回答

1

一個簡單的解決方法是使用xpath來標識應用程序。

xpath = '/*[@AutomationId=\'yourappid\']' 
wnd_element = wait.until { @driver.find_element(:xpath, xpath) } 

這限制了搜索到桌面的直接子女,如果它未能找到在第一次嘗試的孩子不會在整個樹遍歷。

缺點是,除非你有一個好的id,否則可能很難構建xpath。我創建了一個工具(Cruciatus.Xml)來幫助嘗試可能有所幫助的xpath。