我在 selenium 测试中有以下 xpath 语句:
//tbody/tr[td/span[text()='IPODate']]/td[4]/input
它得到了我想要的,但我的测试在 IE6 中非常缓慢。任何人都知道我将如何做与 CSS 选择器相同的选择器?我想我了解如何执行这些操作,但 text()="IPODate"部分除外。
根据要求,这里是我尝试从中选择的表的示例:
<table cellspacing="0" cellpadding="4" border="0" id="tblResearchItems" class="coolTable SingleItem">
<tbody>
....很多很多行
<td>
<input type="button" value="A" onclick="sA('secm.Company', 'IPODate', 299)" class="RButton NarrowButton2 A Show_N"/>
</td>
<td class="TCN">
<span class="CN">IPODate</span><f/>
</td>
<td>
<g/>
</td>
<td class="TCV VerticalAlign">
<input type="text" value="" onfocus="stLT(); hideLB(true)" onblur="mustBeDate($(this));" class="UpUI_Y date NDD hasDatepicker" id="dp1260909771780"/>
<img class="ui-datepicker-trigger" src="../images/calendar.gif" alt="..." title="..."/> <div/>
</td>
</tr>
...还有很多行...
在此示例中,只有一行具有 IPODate 单元格。
最佳答案
CSS 定位器是 css=span.CN
对于其中包含文本IPODate 的跨度。
Saucelabs 对其 blog 的工作原理有很好的解释。
更新:
不幸的是,CSS在上下移动时不会解析整个树,直到它找到它之后。这就是 XPath 如此缓慢的主要原因。 CSS 找到一个项目,然后可以在 DOM 中横向移动。下面的 CSS 会找到 TD
之后的输入框。有 class=TCN
它将您的跨度与表格中的文本保持一致。
CSS: table > tbody > tr > td.TCN + td + td > input
关于XPath 到 CSS 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1909584/