【问题标题】:How to get Text from a div element returns just a "." with Selenium如何从 div 元素中获取文本只返回一个“。”含硒
【发布时间】:2018-11-20 04:36:06
【问题描述】:

我有一个如下所示的 div 元素。

我使用以下 xpath 标识此元素。

//*[contains(@class,'ce-component-title')]

Selenium 识别此元素并加载 WebElement 对象。但是当我去获取它的文本时,我只是得到一个“。”如下所示,而不是获取“购买到付款流程”。我在这里做错了什么?我检查了 chrome 控制台,没有其他元素与此 xpath 匹配。

任何帮助将不胜感激。

【问题讨论】:

    标签: java selenium xpath css-selectors webdriverwait


    【解决方案1】:

    根据您共享的 HTML,该元素是一个 Angular 元素,因此您必须诱导 WebDriverWait 以使所需的 元素可见,您可以使用以下解决方案:

    • cssSelector:

      String myString = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("div[ng-if*='getTitle']>div.ce-component-title"))).getAttribute("innerHTML");
      
    • xpath:

      String myString = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(@ng-if,'getTitle')]/div[@class='ce-component-title flex text-overflow ng-binding']"))).getAttribute("innerHTML");
      

    【讨论】:

    • 感谢 Deb 的回答。如果元素不可见,我会得到一个元素未找到异常,对吗?我的 WebElement 对象中有该元素。只是get text方法返回一个“.”。
    • 不,如果元素不可见,你会得到 ElementNotVisible 异常。解决方案如何?成功了吗?
    【解决方案2】:

    我认为您的 xpath (//*[contains(@class,'ce-component-title')]) 返回多个元素,而您需要的元素不是第一个。 尝试使用浏览器的控制台来验证此 xpath 返回多少元素。 如果你给我这个页面的网址,我可以帮助你。

    【讨论】:

      猜你喜欢
      • 2016-06-18
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2023-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多