如果我在FireFox上使用“Inspect Element”,我会看到:
<span class="stock-number-value ng-binding">17109 </span>
当我使用driver.getSource()时,17109被“vehicle.attributes.stockNumber”取代。
我的主要目标是使用驱动程序获取vehicle.attributes.stockNumber存储的任何值,但我无法弄清楚如何使用Selenium获取该变量的内容。
答案 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";
}
};
}