Java 帧/帧是否始终具有ID属性
我正在尝试用selenium(java)自动化网页 我正在开发一个自动化工具,通过它可以监视并保存Java 帧/帧是否始终具有ID属性,java,html,selenium,iframe,Java,Html,Selenium,Iframe,我正在尝试用selenium(java)自动化网页 我正在开发一个自动化工具,通过它可以监视并保存网站元素。这些保存的webobjects可用于以后执行某些操作。 在监视WebElement时,我将获得(x,y)坐标,并使用该坐标执行以下返回WebElement的脚本: webObject = (WebElement) driver.executeScript(String.format("return document.elementFromPoint(%s, %s);",new Object
网站元素。这些保存的webobjects可用于以后执行某些操作。
在监视WebElement
时,我将获得(x,y)
坐标,并使用该坐标执行以下返回WebElement
的脚本:
webObject = (WebElement) driver.executeScript(String.format("return document.elementFromPoint(%s, %s);",new Object[] { x, y }), new Object[0]);
如果(x,y)
位于不同的帧上,此脚本将返回可用于切换驱动程序的帧的WebElement
。我继续执行相同的脚本,直到得到不是框架的WebElement
。在保存此文件时,我保存了xPath,该xPath与当前的帧以及到目前为止我已切换的帧的ID有关
稍后,在执行一些操作时,我根据框架的ID和xPath定位WebElement
那么,开发人员是否遵循一个惯例/标准来始终为frame/iframe创建ID属性?如果这不是真的,我还可以依赖哪些其他属性?使用Selenium WebDriver使用frame/iframe有几种方法。有关使用Selenium WebDriver处理iframe的更多信息,请参阅下面的stackoverflow
问题:
根据最佳实践,每个帧都应该指定ID和Name属性。但在实时场景中,有时会观察到帧的ID/名称在当前HTMLDOM中不直接可见
切换到帧
我们可以通过3种方式切换到帧
按帧名称:
iframe的Name属性,通过它我们可以切换到它
例如:
driver.switchTo().frame("name_of_frame");
driver.switchTo().frame("id_of_frame");
driver.switchTo().frame(0);
driver.switchTo().frame(1);
driver.switchTo().defaultContent();
按帧ID:
iframe的ID属性,通过它我们可以切换到它
例如:
driver.switchTo().frame("name_of_frame");
driver.switchTo().frame("id_of_frame");
driver.switchTo().frame(0);
driver.switchTo().frame(1);
driver.switchTo().defaultContent();
按索引:
假设页面中有100帧,我们可以使用索引切换到iframe
例如:
driver.switchTo().frame("name_of_frame");
driver.switchTo().frame("id_of_frame");
driver.switchTo().frame(0);
driver.switchTo().frame(1);
driver.switchTo().defaultContent();
切换回主框架:
我们可以使用defaultContent
切换回主框架
例如:
driver.switchTo().frame("name_of_frame");
driver.switchTo().frame("id_of_frame");
driver.switchTo().frame(0);
driver.switchTo().frame(1);
driver.switchTo().defaultContent();
如果这能回答您的问题,请告诉我。id是可选的。不清楚你到底想做什么&基于什么……我认为索引取决于框架的加载方式,所以下次打开同一网页时,某个框架的索引可能会改变。按此操作,我无法保存索引以切换帧。如果一个网页既没有ID属性也没有name属性,那么我还可以保存哪些其他属性,或者您可以建议如何在任何场景中定位一个框架。IMO,框架的加载取决于编写时的代码,因此,除非代码更改,否则框架的顺序将是相同的。如果这个答案符合你的问题,你能接受这个答案作为你问题的解决方案吗?谢谢