首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在不使用绝对xpath的情况下识别驻留在iframe中的元素?

如何在不使用绝对xpath的情况下识别驻留在iframe中的元素?
EN

Stack Overflow用户
提问于 2019-05-21 11:46:29
回答 2查看 318关注 0票数 1

我正在编写一个Selenium脚本来检查页面中的行数:

行在iframe中,所以我不能不使用/*[starts-with(@ id,'someid')来查找元素的数量,因为selenium webdriver无法使用id或相对xpath在iframe中定位元素。只有绝对xpath在工作。

我的行的绝对xpath是这样的

第1行:

代码语言:javascript
代码运行次数:0
运行
复制
/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行:

代码语言:javascript
代码运行次数:0
运行
复制
/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:

代码语言:javascript
代码运行次数:0
运行
复制
/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

代码语言:javascript
代码运行次数:0
运行
复制
<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 &amp;&amp; !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 &amp;&amp; !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>
EN

回答 2

Stack Overflow用户

发布于 2019-05-21 14:43:11

假设当前焦点在浏览器窗口上,并且要从框架中提取行数。因此,焦点已移至框架。

这是使用SwichTo()方法完成的。driver.SwitchTo().Frame(0)。这里0表示是否只打开了一个帧。可以通过Frameindex、FrameName和IwebElement选择帧。

切换到Frame后,使用xpath列出所有tr节点。

//tr[包含(@ng-repeat-start,"funding in data.fundings")

票数 3
EN

Stack Overflow用户

发布于 2019-05-21 12:52:32

首先,您需要切换到iframe,为此,您可以使用以下代码:

代码语言:javascript
代码运行次数:0
运行
复制
driver.SwitchTo().Frame(By.CssSelector("iframe[id*='MasterSplitter_mainContent']"));  

一旦进入框架内部,就可以使用此xpath列出所有tr节点。

代码语言:javascript
代码运行次数:0
运行
复制
//tr[contains(@ng-repeat-start,"funding in data.fundings")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56230804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档