Java 当<;时,无法使用文本定位元素--&燃气轮机;可在标签内找到
有如下的HTML代码。我想使用文本SOFTWATE定位元素Java 当<;时,无法使用文本定位元素--&燃气轮机;可在标签内找到,java,selenium,xpath,Java,Selenium,Xpath,有如下的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"> <!----> <!----> &l
<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')]
,但没有成功
任何人都可以使用文本“
软件”
”来帮助查找元素,尝试以下方法,它可能会起作用
//div[@class='filter-item-wrapper activate']//label[contains(.,'SOFTWARE')]
您可能只是不想定位元素,但也希望在复选框上单击(),为了实现这一点,您必须诱导WebDriverWait使元素可单击,并且您可以使用以下方法:
- 使用
:CSS\u选择器
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
//div/descendant-or-self::label[normalize-space(.)='SOFTWARE']
这应该在尝试匹配文本之前去掉任何额外的前导或尾随空格。这正是为什么我们总是建议人们避免使用
text()
直接访问文本节点的原因。使用string()
来访问包含元素的字符串值几乎总是更好的,最大的区别之一是string()
的结果不受添加或删除注释的影响
因此,请使用
contains(string(),'SOFTWARE')
——它可以缩写为contains(,'SOFTWARE')
,因为当需要字符串并提供节点时,对string()
的调用是隐式的。谢谢,它成功了。请您解释一下“.”在[contains(,'SOFTWARE')]中的用法,以及xpath中规范化空格(.)的含义