Java 帧/帧是否始终具有ID属性

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

我正在尝试用selenium(java)自动化网页

我正在开发一个自动化工具,通过它可以监视并保存
网站元素。这些保存的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,框架的加载取决于编写时的代码,因此,除非代码更改,否则框架的顺序将是相同的。如果这个答案符合你的问题,你能接受这个答案作为你问题的解决方案吗?谢谢