2011-09-26 153 views
2

我正在寫一些測試與Selenium RC(在C#)我們的項目,它使用Ext.NET,一切都很好,在我面對事實之前,上傳「用於上傳文件的按鈕是在Flash上進行的。 它插入這樣的:點擊一個閃光按鈕與硒

<embed width="63" height="30" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="opaque" allowscriptaccess="sameDomain" name="adaxuploaderaddon1317040891508" bgcolor="#FFFFFF" quality="high" src="/CuteWebUI_Uploader_Resource.axd?type=file&file=uploader10.swf&_ver=1317040891509" scale="exactfit" onerror="adaxuploaderaddon1317040891508_onerror()" style="z-index: 123454; width: 63px; height: 30px; opacity: 0.01; background-color: transparent;"> 

所以,在我第一次嘗試這樣做:

selenium.Click("//embed[contains(@name, 'adaxuploaderaddon')] 

當然,它沒有工作:)然後我試過幾個變化,如使用mouseDown,mouseUp,使用clickAt,使用css的位置元素(css = embed) - 但仍然沒有運氣。

在谷歌的人說,可以用Javascript點擊按鈕,但我還沒有找到任何好的例子。

有沒有人遇到過這個問題?

在此先感謝。

回答

0

您可以使用flashvars與嵌入式swf文件進行通信。

+0

您能否給我舉一個使用flashvars的例子來達到這個目的? – Armaxis

+0

hope [this](http://kb2.adobe.com/cps/164/tn_16417.html)幫助 – Mansuro

+0

這件事需要更改嵌入代碼(添加flashvars參數),並且現在我不確定這是可能。需要向開發人員詢問這個問題。感謝這個信息! – Armaxis

0

你能夠檢測上傳按鈕嗎? 如果不使用調用用於Flash上​​傳按鈕的flash的javascript中的object-id或class-id。希望這可以工作。

1

您可以與'IJavaScriptExecutor'&'ExecuteScript'進行通信並導入您的閃存(有關更多詳細信息,請參閱ExternalInterface的搜索)。對於爲例我採取的YouTube頁面,並暫停視頻:

IWebDriver driver = new ChromeDriver(); 
driver.Navigate().GoToUrl("https://www.youtube.com/watch?v=2ac4hKSfQ9s"); 
driver.Manage().Window.Maximize(); 

((IJavaScriptExecutor)driver).ExecuteScript("var movie = window.document.getElementById('movie_player');"+ 
        "console.log(movie);"+ 
        "movie.pauseVideo();"); 
driver.Quit(); 

所以,這是一個解決方案,但在這裏,你不是點擊,而是直接調用點擊AS3功能。

希望有幫助:)