【问题标题】:How to identify an object in Selenium with No tags?如何识别 Selenium 中没有标签的对象?
【发布时间】:2020-04-15 04:50:23
【问题描述】:

在我的代码中,我需要验证在将商品添加到购物车后是否显示文本“产品已成功添加到您的购物车”。这是屏幕截图,也是元素。正如我们所见,文本没有标签,例如 text="Product added to your shopping cart"。就像自己漂浮在那里一样。

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

如果我尝试使用此完整路径,则会收到错误消息“对象是文本,它应该是一个元素”。

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

【问题讨论】:

    标签: javascript selenium selenium-webdriver xpath webdriverwait


    【解决方案1】:

    文本不只是漂浮在那里,它是<h2> 标签的一部分。在xpath 中使用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
    

    【讨论】:

      【解决方案2】:

      文本Product added to your shopping cart是一个Text Node,是父节点<h2>lastChild。因此,提取您需要为visibilityOfElementLocated() 诱导WebDriverWait 的文本,您可以使用以下任一Locator Strategies

      • 使用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());
        

      【讨论】:

      • 感谢它的工作。但是你怎么知道那个文本是“lastChild”?只是想了解更多。再次感谢。
      • @Ronwald 只有2个子节点,一个<i>节点和一个文本节点,其中<i>节点是第一个子节点,文本节点是最后一个子节点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 2016-04-04
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多