c# - 如何在不使用绝对 xpath 的情况下识别 iframe 中的元素?
问题描述
我正在编写一个 Selenium 脚本来检查页面中的行数:
这些行位于 iframe 中,因此我无法使用 /*[starts-with(@id, 'someid') 来查找元素数量,因为 selenium webdriver 无法使用 id 或相对 xpath 在 iframe 中定位元素。只有绝对 xpath 有效。
我的行的绝对 xpath 就是这样
第 1 行:
/html[1]/body[1]/form[1]/table[1]/tbody[1]/tr[1]/td[1]/table[1]/tbody[1]/tr[1]/td[1]/div[1]/table[1]/tbody[1]/tr[1]/td[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/table[1]/tbody[1]/tr[1]/td[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[2]/td[1]/div[1]/table[1]/tbody[1]/tr[3]/td[1]
第 2 行:
/html[1]/body[1]/form[1]/table[1]/tbody[1]/tr[1]/td[1]/table[1]/tbody[1]/tr[1]/td[1]/div[1]/table[1]/tbody[1]/tr[1]/td[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/table[1]/tbody[1]/tr[1]/td[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[2]/td[1]/div[1]/table[1]/tbody[1]/tr[5]/td[1]
因此,如何使用以使用以下开头的绝对 xpath 开始:
/html[1]/body[1]/form[1]/table[1]/tbody[1]/tr[1]/td[1]/table[1]/tbody[1]/tr[1]/td[1]/div[1]/table[1]/tbody[1]/tr[1]/td[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/table[1]/tbody[1]/tr[1]/td[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[2]/td[1]/div[1]/table[1]/tbody[1]/tr[
HTML
<iframe id="MasterSplitter_mainContent_ASPxPageControlManageProgramme_ucEnrolment_Programme_Details_CBPnlDetail_ucFunding_GrantCalculator_pcGC_CIF-1" title="" src="../Funding/FundingGrantCalculator.aspx?SessionKey=k6ML680ffjM3LcWqMwUzNOe33dRU4xgBxVoW%2ftYHVWJs1Re6Yr4oTA%3d%3d"
scrolling="auto" frameborder="0" style="height: 100%; width: 100%;" xpath="1">
<tr ng-repeat-start="funding in data.fundings" ng-show="data.fundings.length > 0 && !ShowLoading" ng-class="GetFundingRowCSSClass(funding)" data-qo-theme="danger" data-nq-tooltip="" data-qo-placement="top-center" data-qs-title="" class="ng-scope AvailableFunding" style="">
<tr ng-repeat-start="funding in data.fundings" ng-show="data.fundings.length > 0 && !ShowLoading" ng-class="GetFundingRowCSSClass(funding)" data-qo-theme="danger" data-nq-tooltip="" data-qo-placement="top-center" data-qs-title="" class="ng-scope AvailableFunding" xpath="1">
</iframe>
解决方案
假设当前焦点在浏览器窗口上,并且要从帧中获取行数。因此,焦点已移至Frame。
这是使用 SwichTo() 方法完成的。驱动程序.SwitchTo().Frame(0)。这里 0 表示是否只打开一帧。可以通过 Frameindex、FrameName 和 IwebElement 选择帧。
切换到 Frame 后,使用 xpath 列出所有 tr 节点。
//tr[contains(@ng-repeat-start,"funding in data.fundings")
推荐阅读
- spring-boot - Spring Boot REST Api中的一对多关系
- javascript - 在参数链接中添加随机值
- azure - 如何在 Azure SSAS 上部署多维数据集(XMLA 格式)
- arrays - 简化 C 中的大量数组声明
- python - 我们是否需要通过来自对象检测模型的所有检测或基于置信度阈值的过滤检测来计算 mAP?
- python - 使用 REST API JSON 响应作为数据在 Python 中构建报告
- python - Python Pillow 降低图像亮度改变背景
- javascript - 在我的 nuxt 网站中嵌入来自 videos.sh 的 iframe
- node.js - 独立的 websocket 客户端
- html - 如何让 HTML 元素跨越同一个类但不被链接