我正在编写一个Selenium脚本来检查页面中的行数:
行位于iframe中,因此我无法使用/ * [starts-with(@id,'someid')查找元素数量,因为硒webdriver无法使用ID或相对位置在iframe中定位元素xpath。只有绝对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>
答案 0 :(得分:2)
首先,您需要切换到iframe,为此您可以使用以下代码:
driver.SwitchTo().Frame(By.CssSelector("iframe[id*='MasterSplitter_mainContent']"));
一旦进入框架,您就可以使用此xpath
列出所有tr
节点。
//tr[contains(@ng-repeat-start,"funding in data.fundings")
答案 1 :(得分:0)
假设当前焦点在浏览器窗口上,并且将从框架中获取行数。因此,焦点已移至Frame。
这是使用SwichTo()方法完成的。 driver.SwitchTo()。Frame(0)。此处0表示是否仅打开一帧。 可以通过Frameindex,FrameName和IwebElement选择框架。
切换到Frame后,使用xpath列出所有tr节点。
// tr [包含(@ ng-repeat-start,“以数据资助。资金”)