2014-03-04 95 views
0

我正在用這個開啓自己的屁股。當標籤包含多於文本的文本時,無法通過文本選擇標籤

我有一個形成了三個表單字段:

  1. 客戶:需要下拉字段
  2. 重量:需要文本字段
  3. 狀態:可選文本字段

每個元素都有標籤。必填字段的標籤包含帶星號的範圍。

我在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> 

唯一的解決方法是適用於我的作品是從重量中刪除所需的標記標籤容器。但是,這並不能解釋「客戶」如何得到匹配。

值得注意的是:我試圖自動測試這個頁面,所以我不能真正刪除該span標籤。

發生了什麼事?和/或我該怎麼做?

回答

4

試着改變你的XPath以下幾點:

//*[text()[contains(.,'t')]] 

此修復source拆分它遠勝於我可能已經完成,所以是指,對於詳細的解釋!我已經使用Firefox的XPath Checker擴展自己測試了它,並且它與您的三個項目相匹配。

+0

我試過了,它確實工作。 – Richard

+0

這應該被接受爲答案。我嘗試過,它的工作原理。 – nilesh

+0

它的工作原理!祝福你一千次,這已經阻止了我爲永遠。 – XtinaS

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> 
+0

這個按預期工作。不幸的是,他提到無法刪除span標籤,所以我認爲他不能使用它。 – Tetrinity

+0

@Tetrinity當然,但我認爲這是HTML中的一個錯誤,因爲HTML本身需要被正確書寫。 – Richard

+0

原來的HTML是遍佈的地方,是:) – Tetrinity

0

您是否使用SeleniumWebDriverWebDriver作爲迴應返回什麼?還要確保你添加了一個「。」之前的xpath像.//*[contains(text(),'t')]

這是什麼打印?

List<WebElement> elements = driver.findElement(By.xpath(".//*[contains(text(),'t')]")); 
s.o.p(elements.size()); 
1

嘗試用以下方法

driver.findElement(By.xpath( 「//跨度[@類= '所需-標記']/..」))。gettext的()。包含(「重量」)

請讓我知道上面的方法工作與否。