Do Frames / iFrames总是具有ID属性

时间:2017-05-17 10:00:27

标签: java html selenium iframe

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

我正在开发一种自动化工具,可以使用该工具监视并保存WebElement。这些保存的web对象可用于稍后执行某些操作。 在监视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的{​​{1}},可用于切换驱动程序。我继续执行相同的脚本,直到我得到Frame而不是WebElement。保存时,我保存xPath,它相对于我目前已切换的帧的当前Frame和ID。

稍后,在执行某些操作时,我会根据Frame和xPath的ID找到WebElement

那么开发人员是否遵循约定/标准来始终为frame / iframe创建ID属性?如果不是这样,我可以依赖其他属性吗?

2 个答案:

答案 0 :(得分:1)

根据最佳做法,每个框架都应指定ID和Name属性。但在实时场景中,有时观察到帧的ID /名称在当前HTML DOM中不可直接显示。

切换到帧

我们可以通过3种方式切换到帧。

按帧名称:

iframe的名称属性,我们可以通过它转换到它。

示例:

driver.switchTo().frame("name_of_frame");

按帧ID:

iframe的ID属性,我们可以通过它转换到它。

示例:

driver.switchTo().frame("id_of_frame");

按索引:

假设页面中有100个帧,我们可以使用索引切换到iframe。

示例:

driver.switchTo().frame(0);
driver.switchTo().frame(1);

切换回主框架:

我们可以使用defaultContent切换回主框架。

示例:

driver.switchTo().defaultContent();

如果这回答你的问题,请告诉我。

答案 1 :(得分:0)

使用Locale/Code page有几种方法可以使用frame / iframe。您可以参考以下aaptOptions { cruncherEnabled = false } 问题,了解有关使用Selenium WebDriver处理iframe的更多信息:

How to identify and switch to the frame in selenium webdriver when frame does not have id