Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当<;时,无法使用文本定位元素--&燃气轮机;可在标签内找到_Java_Selenium_Xpath - Fatal编程技术网

Java 当<;时,无法使用文本定位元素--&燃气轮机;可在标签内找到

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

有如下的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')]
,但没有成功


任何人都可以使用文本“
软件”

来帮助查找元素,尝试以下方法,它可能会起作用

//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中规范化空格(.)的含义