我正在用 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 :(得分:1)
您可以与&#39; IJavaScriptExecutor&#39; &安培; &#39; ExecuteScript&#39;并启动你的闪存(有关详细信息,请搜索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功能。
希望有所帮助:)
答案 1 :(得分:0)
您可以使用flashvars与嵌入的swf文件进行通信。
答案 2 :(得分:0)
你能检测到上传按钮吗? 如果不是在调用用于flash上传按钮的flash的javascript中使用object-id或class-id。希望这可行。