我正在尝试使用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属性?如果不是这样,我可以依赖其他属性吗?
答案 0 :(得分:1)
根据最佳做法,每个框架都应指定ID和Name属性。但在实时场景中,有时观察到帧的ID /名称在当前HTML DOM中不可直接显示。
我们可以通过3种方式切换到帧。
iframe的名称属性,我们可以通过它转换到它。
示例:
driver.switchTo().frame("name_of_frame");
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