具有如下所示的HTML代码。我想使用文本SOFTWATE定位元素。
<label _ngcontent-c5="" class="form-check-label" style="" xpath="1">
<input _ngcontent-c5="" class="form-check-input ng-untouched ng-pristine ng-valid" type="checkbox">
<!---->
<!---->
<span _ngcontent-c5="" class="checkmark">
</span>
SOFTWARE
</label>
尝试使用xpath //div[@class='filter-item-wrapper activate']//label[contains(text(),'SOFTWARE')]
,但没有运气。
任何人都可以使用文本“ SOFTWARE
”来帮助找到元素的位置
答案 0 :(得分:1)
尝试以下操作可能会起作用。
//div[@class='filter-item-wrapper activate']//label[contains(.,'SOFTWARE')]
答案 1 :(得分:1)
这就是为什么我们总是建议人们避免使用text()
直接访问文本节点的原因。使用string()
访问包含元素的字符串值几乎总是更好,最大的区别之一是string()
的结果不受添加或删除注释的影响。
因此,请使用contains(string(), 'SOFTWARE')
-可以将其缩写为contains(., 'SOFTWARE')
,因为在需要字符串并提供节点时,对string()
的调用是隐式的。
答案 2 :(得分:0)
想必您根本不想定位元素,但是您也想在复选框上click()
,并要实现这一点 WebDriverWait ,使元素可以点击,并且您可以使用以下Locator Strategy:
使用CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "label.form-check-label>input.form-check-input.ng-untouched.ng-pristine.ng-valid[type='checkbox']"))).click()
使用XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@class='form-check-label' and normalize-space()='SOFTWARE']/input[@class='form-check-input ng-untouched ng-pristine ng-valid']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
答案 3 :(得分:0)
您可以尝试:
//div/descendant-or-self::label[normalize-space(.)='SOFTWARE']
这应该在尝试匹配文本之前删除任何其他前导或尾随空格。