如何在没有标签的情况下识别 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 的文本,您可以使用以下任一方法 :
使用Python和cssSelector:
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())
使用Java和xpath:
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());
在我的代码中,我需要验证在将商品添加到购物车后是否显示文本 "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 的文本,您可以使用以下任一方法
使用Python和cssSelector:
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())
使用Java和xpath:
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());