如何使用 XPATH 访问 TR 内的链接
Posted
技术标签:
【中文标题】如何使用 XPATH 访问 TR 内的链接【英文标题】:How can I reach the link inside TR using XPATH 【发布时间】:2014-09-27 01:35:02 【问题描述】:此 html 代码具有目标菜单,您需要选择一个目标。这些目标之一是继续进程的任何目标。
<tr id="mainForm:nav-panel-tab-set:0:trigger-selectTable:0" class=" iceRowSelMouseOver" tabindex="0" onmouseover="this.className=' iceRowSelMouseOver';" onmouseout="Ice.enableTxtSelection(document.body); this.className='iceDatTblRow1 selectable-rowRow1 iceRowSel'" onmousedown="return Ice.preventTextSelection(event);" ondblclick="Ice.registerDblClick(this);" onclick="Ice.registerClick(this,'mainForm:nav-panel-tab-set:0:trigger-selectTableclick_row','mainForm:nav-panel-tab-set:0:trigger-selectTableclick_count','0','mainForm',200,true,event,false,'mainForm:nav-panel-tab-set:0:trigger-selectTablesel_rows','');">
<td class="iceDatTblCol1 selectable-rowCol1" scope="row">
<a id="mainForm:nav-panel-tab-set:0:trigger-selectTable_idx_0" class="iceHdnLnk" onfocus="return Ice.tblRowFocus(this, false);" onblur="return Ice.tblRowBlur(this);" href="#">
<img src="/ice/xmlhttp/css/xp/css-images/spacer.gif"/>
</a>
<span id="mainForm:nav-panel-tab-set:0:trigger-selectTable:0:j_idt1417" class="iceOutTxt">ANY TARGET</span>
</td>
<td class="iceDatTblCol2 selectable-rowCol2">
<span id="mainForm:nav-panel-tab-set:0:trigger-selectTable:0:j_idt1419" class="iceOutTxt select-icon">»</span>
</td>
</tr>
如何使用 XPATH 到达 ANY TARGET 以单击 >> 添加?
额外信息:
前面的代码是子窗口添加目标的代码。主窗口代码为:
<tr class="icePnlGrdRow1 settings-tableRow1">
<td id="mainForm:nav-panel-tab-set:0:j_idt1305-2-0" class="icePnlGrdCol1 settings-tableCol1">
<table id="mainForm:nav-panel-tab-set:0:j_idt1326" class="icePnlGrd settingsLabel">
<tbody>
<tr class="icePnlGrdRow1 settingsLabelRow1">
<td id="mainForm:nav-panel-tab-set:0:j_idt1326-0-0" class="icePnlGrdCol1 settingsLabelCol1">
<span id="mainForm:nav-panel-tab-set:0:j_idt1327" class="iceOutTxt label">Target</span>
</td>
</tr>
<tr class="icePnlGrdRow2 settingsLabelRow2">
<td id="mainForm:nav-panel-tab-set:0:j_idt1326-1-0" class="icePnlGrdCol1 settingsLabelCol1">
<span id="mainForm:nav-panel-tab-set:0:j_idt1328" class="iceOutTxt sidenote">Target or group</span>
</td>
</tr>
</tbody>
</table>
</td>
<td id="mainForm:nav-panel-tab-set:0:j_idt1305-2-1" class="icePnlGrdCol2 settings-tableCol2">
<table id="mainForm:nav-panel-tab-set:0:j_idt1329" class="icePnlGrd search">
<tbody>
<tr class="icePnlGrdRow1 searchRow1">
<td id="mainForm:nav-panel-tab-set:0:j_idt1329-0-0" class="icePnlGrdCol1 searchCol1">
<span id="mainForm:nav-panel-tab-set:0:j_idt1330" class="iceOutTxt"/>
</td>
<td id="mainForm:nav-panel-tab-set:0:j_idt1329-0-1" class="icePnlGrdCol2 searchCol2">
<input id="mainForm:nav-panel-tab-set:0:j_idt1331" class="iceCmdBtn" type="image" src="/ice/img/search-icon.png" onfocus="setFocus(this.id);" onclick="iceSubmitPartial(form, this, event);return false;" onblur="setFocus('');" name="mainForm:nav-panel-tab-set:0:j_idt1331"/>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
我用ID点击目标打开子窗口
//*[@id='mainForm:nav-panel-tab-set:0:j_idt1331']
但是,我使用您提到的解决方案,都没有得到任何响应来向我的主窗口添加任何目标。
【问题讨论】:
【参考方案1】:您可以访问包含“ANY TARGET”的span
:
//span[text() = "ANY TARGET"]
您可以将其扩展到包含“>>”的td
中紧跟在包含“ANY TARGET”的td
之后的span
:
//td[span[text() = "ANY TARGET"]]/following-sibling::td[1]/span[text() = ">>"]
【讨论】:
@kjhughes 谢谢,但我遇到了这个问题SyntaxError: Non-ASCII character '\xc2' in file
。这个问题指向“>>”
我相信这个新的“\xc2”错误是一个单独的问题。查找并消除特殊字符,或尝试将“#coding=utf-8”放在 python 源代码的顶部到define the source encoding。另请参阅此SO question and answers 或@alecxe 的最佳答案here。
谢谢你,它工作得很好。最后 :)。此代码正确//td[span[text() = "ANY TARGET"]]/following-sibling::td[1]/span[text() = ">>"]
【参考方案2】:
尝试将注意力集中在第一个 TD 上,然后单击 Span 元素。
IWebElement td = browser_drive.FindElement(By.Id("mainForm:nav-panel-tab-set:0:trigger-selectTable:0")).FindElements(By.TagName("td"))[0];
IWebElement anytext = td.FindElement(By.Id("mainForm:nav-panel-tab-set:0:trigger-selectTable:0:j_idt1417"));
OpenQA.Selenium.Interactions.Actions act = new OpenQA.Selenium.Interactions.Actions(browser_drive);
act.MoveToElement(td).Click(anytext);
(使用C#编码,必须有替代方案。伪代码,未编译)
【讨论】:
以上是关于如何使用 XPATH 访问 TR 内的链接的主要内容,如果未能解决你的问题,请参考以下文章
如何在python中使用selenium Xpath从tr标签中获取所有td [3]标签
在 SSIS 中,如何在 Foreach NodeList 枚举器中使用 XPATH 循环遍历特定元素内的 XML
python selenium xpath 的tr[]中如何写变量的运算?