如何在没有标签的情况下识别 Selenium 中的对象?

How to identify an object in Selenium with No tags?

在我的代码中,我需要验证在将商品添加到购物车后是否显示文本 "Product successfully added to your shopping cart"。这是屏幕截图,也是元素。如我们所见,文本没有标签,即类似 text="Product Added to your shopping cart" 的东西。就像自己漂浮在那里一样。

这是此文本对象的完整 xpath://*[@id="layer_cart"]/div[1]/div[1]/h2/text()

如果我尝试使用此完整路径,则会出现错误 "object is text, it should be an element"。

如果我尝试使用直到 "[@id="layer_cart"]/div[1]/div[1]/h2",并且不包含 'text()',我无法获取文本并进行验证,因为它确实不是 <i> 标记的一部分。结果只是空白文本。有任何想法吗?谢谢

文本不只是漂浮在那里,它是 <h2> 标签的一部分。在 xpath returns 中使用 text() 文本节点,Selenium 不支持。您使用的第二条路径是正确的路径,尽管它现在不是有效的 xpath

WebElement element = driver.findElement(By.xpath("//*[@id='layer_cart']/div[1]/div[1]/h2"));
element.text // Product successfully added to your shopping cart

文本已添加到您的购物车是一个文本节点并且是lastChild<h2> 节点。因此,提取您需要为 visibilityOfElementLocated() 引入 WebDriverWait 的文本,您可以使用以下任一方法 :

  • 使用PythoncssSelector:

    print(driver.execute_script('return arguments[0].lastChild.textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.layer_cart_product h2")))).strip())
    
  • 使用Javaxpath:

    System.out.println(((JavaScriptExecutor)driver).executeScript("return arguments[0].lastChild.textContent;", new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(@class, 'layer_cart_product')]//h2")))).toString());