如何使用Selenium WebDriver从变量中提取文本?

时间:2016-11-07 19:27:31

标签: java html selenium selenium-webdriver

如果我在FireFox上使用“Inspect Element”,我会看到:

<span class="stock-number-value ng-binding">17109 </span>

当我使用driver.getSource()时,17109被“vehicle.attributes.stockNumber”取代。

我的主要目标是使用驱动程序获取vehicle.attributes.stockNumber存储的任何值,但我无法弄清楚如何使用Selenium获取该变量的内容。

1 个答案:

答案 0 :(得分:2)

我怀疑你在过程中过早地获取了源代码,而 angular尚未准备就绪并且绑定尚未被数据填充。我使用自定义等待条件函数来等待“stock”有一个数值:

WebDriverWait wait = new WebDriverWait(webDriver, 510);
WebElement stock = wait.until(waitForStock(By.cssSelector(".stock-number-value")));
System.out.println(stock.getText());

其中waitForStock就是这样的:

public static ExpectedCondition<Boolean> waitForStock(final By locator) {
  return new ExpectedCondition<Boolean>() {
    @Override
    public Boolean apply(WebDriver driver) {
      try {
        WebElement elm = driver.findElement(locator);
        return elm.getText().trim().matches("[0-9]+");
      } catch (NoSuchElementException e) {
        return false;
      } catch (StaleElementReferenceException e) {
        return false;
      }
    }

    @Override
    public String toString() {
      return "stock is not yet loaded";
    }
  };
}