Java 具有webelement的Selenium WebDriver集属性

Java 具有webelement的Selenium WebDriver集属性,java,selenium,webdriver,Java,Selenium,Webdriver,目前我有一个问题-我想从当前帧切换到父帧。应用程序有很多内部框架,所以使用driver.switchTo().defaultContent()不是这种情况。在这个可能的解决方案中,建议您记住您访问过的所有帧,并使用 driver.switchTo().defaultContent() 主要问题在于,在我的应用程序中,有时我被迫使用切换到xpath和其他定位器定位的帧-使用WebElement切换。正如上面讨论中已经提到的,在切换所有定位的WebElement之后,它将变得无效,并且不能用于切换。

目前我有一个问题-我想从当前帧切换到父帧。应用程序有很多内部框架,所以使用driver.switchTo().defaultContent()不是这种情况。在这个可能的解决方案中,建议您记住您访问过的所有帧,并使用

driver.switchTo().defaultContent()

主要问题在于,在我的应用程序中,有时我被迫使用切换到xpath和其他定位器定位的帧-使用WebElement切换。正如上面讨论中已经提到的,在切换所有定位的WebElement之后,它将变得无效,并且不能用于切换。所以我应该有办法再次在框架内找到这个元素。虽然我可以找到执行一些js调用的这个框架元素的索引(即
(WebElement)executeScript(“window.frames[i]”).equals(myWebElement)
),但情况并非如此,因为当从页面中删除一些框架时,索引可能会更改。我可以尝试查找帧名称和id,但可能没有指定它们

所以我看到了唯一可能的解决方案-将某些属性设置为当前选定的父帧-例如属性值为true的活动帧。同时,我应该能够为所有可以切换帧的方法执行此操作(存在3个)。在所有方法中,我都可以接收表示框架的WebElement,但据我所知,要更改属性值,应该执行一些js代码。所以问题是如何在js中定位当前的WebElement


感谢您阅读本文。

您必须使用javascript实现自定义逻辑


如果元素有id,那么您可以使用javascript中可用的findElementById()方法,或者使用findElementsByName()方法,然后迭代数组并匹配其他属性以缩小到您的元素

查看上面的代码片段。这是在Js中查找当前元素的最佳方法 将元素作为参数传递以执行脚本,并在js中使用参数[0]引用它

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

您可以尝试webElement.setId(“someValue”)方法来设置webElement的标识符,然后在javascript中可以轻松地说elem=document.findElementById(“someValue”);elem.Value=“somethingElse”;如果元素没有自己的id