我正在为此疯狂地开车。
我在表单中有三个表单字段:
每个元素都有该标签。必填字段的标签包含带星号的范围。
我在Chrome中使用Xpather。当我搜索这个时,我得到2个结果,当我得到3:
//*[contains(text(),'t')]
这对我来说毫无意义。
正在运作的客户:
<label for='customer-field'>
<span class='required-marker'>*</span>
Customer
<input id='customer-field' type='text' />
</label>
重量,不工作:
<label class='control-label'>
<span id='ctl01_requiredMarker' class='required-marker'>*</span>
Weight
</label>
状态,正在运作:
<label class='control-label'>
Status
</label>
对我有用的唯一解决方法是从Weight标签容器中删除所需的标记。但是,这并不能解释“客户”是如何匹配的。
值得注意的是:我正在尝试自动测试此页面,因此我无法真正删除该span标记。
发生了什么事?和/或我该怎么做?
答案 0 :(得分:6)
尝试将XPath更改为以下内容:
//*[text()[contains(.,'t')]]
此修复程序的source将其分解得比我完成的要好得多,所以请参阅详细解释!我已经使用Firefox的XPath Checker扩展程序自己测试了它,它匹配你的三个项目。
答案 1 :(得分:1)
尝试使用以下方法
driver.findElement(By.xpath(&#34; //跨度[@class =&#39;需要标记物&#39;] /.. 34;))。。的getText()包含(& #34;重量&#34)
请让我知道上面的方法是否有效。
答案 2 :(得分:0)
我认为你的HTML是问题所在。
这可能是你的html应该是这样的:
<span class='required-marker'>*
<label for='customer-field'>Customer</label>
<input id='customer-field' type='text' />
</span>
<span id='ctl01_requiredMarker' class='required-marker'>*
<label class='control-label'>Weight</label>
</span>
<label class='control-label'>Status</label>
答案 3 :(得分:0)
您使用的是Selenium
还是WebDriver
? WebDriver
作为回复返回什么?还要确保添加“。”在xpath之前,如.//*[contains(text(),'t')]
这是什么印刷品?
List<WebElement> elements = driver.findElement(By.xpath(".//*[contains(text(),'t')]"));
s.o.p(elements.size());