2012-06-06 64 views
1

目前我有一個問題 - 我想切換出當前幀到父。應用程序有很多內部框架,所以使用driver.switchTo()。defaultContent()並非如此。在這種discussion可能的解決方案建議 - 你應該記住你訪問過的所有幀,並使用Selenium WebDriver集具有webelement的屬性

driver.switchTo()從頂部在它們之間迭代defaultContent()

的主要問題在不在。這個事實,在我的應用程序中,我有時會被迫使用切換到xpath和其他定位器的幀 - 使用WebElement開關。正如上面在討論中已經提到的,在切換所有位於的WebElement變爲無效並且不能用於切換之後。所以我應該有一些方法來再次在框架內找到這個元素。儘管我可以定位執行某些js調用的該框架元素的索引(即(WebElement)executeScript("window.frames[i]").equals(myWebElement)),但不是這種情況,因爲當從頁面刪除某些框架時,索引可能會改變。要麼我可以嘗試查找框架名稱和ID的,但它們可能沒有指定。

所以我看到唯一可能的解決方案 - 將某些屬性設置爲當前選擇的父項的框架 - 對於具有值true的活動示例屬性。此外,我應該能夠爲所有可以切換幀的方法(存在3個)執行此操作。在所有的方法中,我可以接收WebElement表示框架,但據我所知要更改屬性值,您應該執行一些js代碼。所以問題是如何在js中定位當前的WebElement。

感謝您閱讀這一切。

回答

2

看看這個代碼片斷上面。這是你可以找到當前元素在Js 傳遞元素作爲argumet執行腳本並引用它在js中使用參數[0 ]

WebElement element = driver.findElement(By.id("foo")); 
String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element); 
0

你將不得不使用JavaScript

如果元素的ID,那麼你可以使用findElementById()方法在其他的JavaScript可使用findElementsByName(),然後迭代這個數組和匹配等來實現自定義邏輯屬性縮小到你的元素

+0

,你可以嘗試 webElement.setId(「someValue中」)的方法來設置標識符的webelement,然後在你的JavaScript,你可以很容易地說 ELEM = document.findElementById(「someValue中」); elem.Value =「somethingElse」; 如果元素沒有自己的ID –

相關問題