我正在使用 selenium 来测试一个包含多个由 liferay 制作的 portlet 的页面。
每个 portlet 都有一个具有相同 id 的保存按钮,它使用 portlet 的 iframe id 来区分按钮。
如何在 selenium 中编写可以理解我的意思的按钮的代码?
我正在使用 selenium 来测试一个包含多个由 liferay 制作的 portlet 的页面。
每个 portlet 都有一个具有相同 id 的保存按钮,它使用 portlet 的 iframe id 来区分按钮。
如何在 selenium 中编写可以理解我的意思的按钮的代码?
你需要使用driver.switchTo().frame(IFrameElement)
. 您需要切换进/出的任何类型的 IFrame。
您可以使用 xpath 或 css 选择器来查找依赖于父母的孩子。
粘贴您的 html,我们可以提供示例
这是否意味着您的 portlet 都嵌入了 iframe?通常,portlet 只是将 HTML 片段呈现到相同的文档中。在这种情况下,您的实现将被视为有缺陷:Portlet 不得使用可能发生冲突的 ID。例如你不应该渲染
<input type="submit" id="save"/>
但
<input type="submit" id="<portlet:namespace/>save"/>
或类似的 - 确保 id 是唯一的,因为它最终在相同的 HTML-DOM 中 - 根据规范 - 假定 id 是唯一的。
还有其他创建唯一 id 的方法,但请记住:如果您自己想出前缀,每个 portlet,有人可能会将相同的 portlet 添加到页面两次,即使所有不同的portlet ,您最终也会得到相同的 id有唯一的ID。
如果您确实从您的 portlet 呈现许多不同的 iframe,您可以忽略此答案或将其作为通过更改实现来更好地利用门户环境的建议。