如何定位嵌套的span元素定位器

时间:2017-09-13 17:57:31

标签: selenium xpath css-selectors

如何仅查找包含以下代码中价格值的父级跨度,定位器策略无关紧要:

<div class="price-box price-margin">
    <p class="old-price"></p>
    <p class="special-price">
        <span id="product-price-75254" class="price">
                              56,90 € 
             <span class="steuerstern">*</span>
        </span>
    </p>
</div>

4 个答案:

答案 0 :(得分:0)

问题不在于选择器。但文字功能。

//p[@class="special-price"]/span[@class="price"]

这将选择节点,但selenium也将始终返回子节点的节点。你要找的是这种情况下的节点文本。这只能使用JavaScript完成。既然你没有提到我会假设python的语言

elem = driver.find_element_by_xpath('//p[@class="special-price"]/span[@class="price"]')

price = driver.execute_script("return arguments[0].firstChild.textContent.trim();", elem)

print(price)
56,90 €

答案 1 :(得分:0)

使用选择器你可以这样:

".price-box span.price"

结果:

56,90 €

答案 2 :(得分:0)

要在Chrome中测试xpath正确性,您可以使用

> curl -i -X OPTIONS http://diffDomain.com/spf/v1/user/user@example.com/password/change
HTTP/1.1 500 Internal Server Error
Date: Thu, 14 Sep 2017 21:25:39 GMT
Server: Apache/2.4.7 (Ubuntu)
Access-Control-Allow-Methods: POST, GET, PUT, OPTIONS, DELETE
X-Powered-By: PHP/5.5.9-1ubuntu4.20
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type, api_key, Authorization, Accept, Content-Type, api_key, Authorization, Accept, Access-Control-Request-Method, Origin
Content-Length: 0
Connection: close
Content-Type: application/json

由于您没有提及您使用的语言,因此以下是使用.getText()

在带有selenium的nightwatchjs中的示例

.getText()返回一个对象,实际文本是回调值。

//span[@class="price"]/text()

答案 3 :(得分:0)

由于您没有提及您正在使用的Selenium绑定,因此我将通过Java绑定构建一个答案。在这里,我们将使用自定义的xpath来定位文本56,90 €的节点,而不是*,如下所示:

WebElement ele = driver.findElement(By.xpath("//p[@class='special-price']/span[contains(@class,'price') and not(@class='steuerstern')]"));