我想根據文本選擇一個元素。我遇到的問題是元素文本在源代碼中存在多次。我使用xpath來找到它(儘管我試圖避免xpath),但這就是我能夠工作的一切。使用cssSelector選擇嵌套元素使用cssSelector - Selenium WebDriver
下面是我對工作的HTML:
<ul id="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage" class="cbl centered d2" style="width:511px;">
<li>
<input id="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_0" name="ctl00$ctl00$Dialogs$Dialogs$ctlAcknowledgeMessage_ConditionalDecline$cblMessage$0" onclick="CannedCommentSelected(this);" value="Complexity of job requires extra charge" type="checkbox">
<label for="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_0">Complexity of job requires extra charge</label>
</li>
<li>
<input id="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_1" name="ctl00$ctl00$Dialogs$Dialogs$ctlAcknowledgeMessage_ConditionalDecline$cblMessage$1" onclick="CannedCommentSelected(this);" value="Complexity of job requires extra time" type="checkbox">
<label for="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_1">Complexity of job requires extra time</label>
</li>
<li>
<input id="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_2" name="ctl00$ctl00$Dialogs$Dialogs$ctlAcknowledgeMessage_ConditionalDecline$cblMessage$2" onclick="CannedCommentSelected(this);" value="Current workload requires extra time" type="checkbox">
<label for="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_2">Current workload requires extra time</label>
</li>
<li>
<input id="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_3" name="ctl00$ctl00$Dialogs$Dialogs$ctlAcknowledgeMessage_ConditionalDecline$cblMessage$3" onclick="CannedCommentSelected(this);" value="Distance to property requires extra charge" type="checkbox">
<label for="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_3">Distance to property requires extra charge</label>
</li>
</ul>
我用driver.findElement(By.xpath("//label[contains(text(), 'Complexity of job requires extra charge')]"));
,但我開始「元素當前不可見,因此可能無法與之交互」的錯誤,害得我發現有「工作的複雜性需要額外費用」文本的多個標籤。我試過driver.findElement(By.cssSelector("#Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage > #Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_0 > label[text='Complexity of job requires extra charge']"));
,但它試圖找到元素超時。
我在做什麼錯?
我甚至試過driver.findElement(By.cssSelector("#Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage > input[value='Complexity of job requires extra charge']"));
,我肯定會工作,但它超時尋找。
使用Css選擇器'輸入[值='作業的複雜性需要額外費用'] – Madhan
當我這樣做時,我得到「元素當前不可見,因此可能無法互動」,因爲有多個元素那個價值。這就是爲什麼我試圖從ul id開始更具體,我似乎無法正確地將cssSelector放到該值文本上 –
當您使用'By.xpath'時,爲什麼不使用'for'屬性定位?它在您的示例HTML中是唯一的。 –