我有此代码:
<li class="search-choice" id="elementID">
<span>TEST.SER</span>
<a href="javascript:void(0)" class="search-choice-close" rel="53"></a></li>
它显示如下:
我想在元素的X上单击一次,但是要计算没有ID的名称。我尝试这样做但没有得到它:
"test2": (By.XPATH, "//a[@class='search-choice-close' and contains(text(), 'TEST.SER')]"),
"test3": (By.XPATH, "//a[@class='search-choice-close']//span[contains(text(),'TEST.SER')]"),
"test": (By.XPATH,"//li[@class='search-choice']//span[contains(text(),'TEST.SER')]//a[ @class ='search-choice-close']")
有什么建议吗?
非常感谢您。
答案 0 :(得分:0)
尝试在XPath以下
//span[text()='TEST.SER']/following::a
答案 1 :(得分:0)
Text()TEST.SER和class =“ search-choice-close”不在同一层次结构中,因此选项1不起作用。
定位器创建的选项2层次结构错误。跨度在标签上方
选项3,您尝试单击li元素而不是href。这样就行不通了。
如果要单击XPATH(// a [@ class ='search-choice-close'] / parent :: span [contains(text(),'TEST.SER')])),请尝试文字。
如果要单击图像,只需使用By.XPATH(// a [@ class ='search-choice-close'])
答案 2 :(得分:0)
您的xpath找不到正确的元素的原因是因为它们正在寻找span和tag的属性,就像它们是同一元素一样,或者好像它们被嵌入另一个一样。您将需要找到span元素,然后找到其后的同级元素。
您遇到的问题的原因
"test2": (By.XPATH, "//a[@class='search-choice-close' and contains(text(), 'TEST.SER')]")
在这里,您正在寻找一个元素,该元素包含a元素的正确类,但span元素的文本
"test3": (By.XPATH, "//a[@class='search-choice-close']//span[contains(text(),'TEST.SER')]")
在这里,您正在寻找span元素,就好像它存在于a元素内,但并不存在于a元素内,而是沿着它的侧面
"test": (By.XPATH,"//li[@class='search-choice']//span[contains(text(),'TEST.SER')]//a[ @class ='search-choice-close']")
此处,您正在执行与上述相同的操作,在span元素内寻找一个元素。这些元素不是彼此的后代或祖先,而是兄弟姐妹。
您需要做的是找到span元素的同级元素,如果您需要使用span之前的文本查找a元素。
//span[text()='TEST.SER']/following::a
以下是有关DOM中元素层次结构的更多信息,这些信息可能对您下次在通过Xpath定位元素时遇到问题很有用。 https://www.w3schools.com/xml/xpath_nodes.asp