Selenium WebDriver设置具有webelement的Attribute

时间:2012-06-06 15:20:49

标签: java selenium webdriver

目前我遇到了问题 - 我想将当前帧切换为父级。应用程序有很多内部框架,因此使用driver.switchTo()。defaultContent()不是这种情况。建议使用此discussion可能的解决方案 - 您应该记住您访问过的所有帧,并使用

从顶部迭代它们
  

driver.switchTo()。defaultContent()

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

所以我看到了唯一可行的解​​决方案 - 将一些属性设置为当前所选父级的帧 - 对于示例属性,其值为true。此外,我应该可以为所有可以切换帧的方法(存在3)执行此操作。在所有方法中,我都可以接收表示帧的WebElement,但据我所知,要更改属性值,您应该执行一些js代码。所以问题是如何在js中找到当前的WebElement。

感谢您阅读本文。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

如果元素具有id,则可以使用javascript中可用的findElementById()方法,然后使用findElementsByName(),然后遍历数组并匹配其他属性以缩小到元素