这里我想填写输入字段,但Xpath无法访问它。。。请帮帮我。。
代码如下。。。。
<table class="detailList" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="labelCol">
<div id="div1">
<div class="pbSubsection">
<table class="detailList" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="data2Col" colspan="2">
<span style="font-Size:12px;">
Process Name
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</td>
<td style="text-align:left;" class="data2Col">
<div id=div2">
<div class="pbSubsection">
<table class="detailList" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="data2Col" colspan="2">
<div id="div3" class="requiredInput">
<div id="div4" class="requiredBlock"></div>
<input name="pName" style="width:50%;" type="text">
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</td>
</tr>
</tbody>
</table>
我正在尝试
WebElement ele=driver.findElement(By.xpath("//span[text()='Process Name']/preceding::td/div/input[@type='text']");
ele.sendKeys("PM 001");
但在此之前,我知道它是错误的。。请帮我解决这个问题。。。。。。。
这里input和div id的name属性值将动态更改。。。
所以我试图通过标签和前面的输入标签来查找。。。
提前感谢
您的XPath完全错误。
//span[normalize-space(text())='Process Name']/ancestor::tr/descendant::input
就是你追求的。
如果input
的name
没有改变,你可以简单地通过:获得它
driver.findElement(By.name("pName"));
XPath在第一个障碍处失败,原因很简单,因为span
在"进程名称"周围有很多的空白,所以在比较之前,使用normalize-space
强制它从文本中去除空白。
然后你也在下一站摔倒了,preceding
。。。你在这里是span
的级别,它尽你所能深入,一开始就没有什么"先于"它。
//span[normalize-space()="进程名称"]//祖先:tr//div//input[@type='text']