Selenium 网络驱动程序可以跟踪网页更改吗?
Can Selenium web driver track web page changes?
每次网页有变化我都想获取网页的文本元素。所以为了拥有文本元素,这是我的方法:
public void getContentPage(WebDriver driver) {
WebDriverWait wait = new WebDriverWait(driver, 15);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.tagName("body")));
System.out.println(element.getText());
}
我需要的是一种使用 Selenium 的侦听器,每当 HTML 正文内容发生变化时调用上述方法:
public void listen (WebDriver driver) {
// some kind of listner that waits for any changes to happen in HTML
if (changed) getContentPage(driver);
else keeplistning()
}
我不确定是否有一种方法可以跟踪页面上的所有更改,我不确定您是否需要这个,因为这会触发您进行许多不相关的更改。
此处有用的是跟踪某些特定相关 元素的更改。
因此,要等到某些特定元素发生更改,您可以使用 refreshed
ExpectedCondition
,如下所示:
WebElement button = driver.findElement(By.id("myBtn"));
wait.until(ExpectedConditions.refreshed(button));
如果你想监控多个元素,它会是这样的:
wait.until(ExpectedConditions.or(
ExpectedConditions.refreshed(element1),
ExpectedConditions.refreshed(element2),
ExpectedConditions.refreshed(element3)));
当然,您应该根据您的具体代码用途将其包装在某种方法中。我这里只写了基本思路。
UPD
要跟踪整个页面,您可以使用 driver.getPageSource();
方法。以一定的时间间隔轮询页面状态并将此方法的先前结果的值与新结果进行比较将为您提供任何页面内容更改的指示。
每次网页有变化我都想获取网页的文本元素。所以为了拥有文本元素,这是我的方法:
public void getContentPage(WebDriver driver) {
WebDriverWait wait = new WebDriverWait(driver, 15);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.tagName("body")));
System.out.println(element.getText());
}
我需要的是一种使用 Selenium 的侦听器,每当 HTML 正文内容发生变化时调用上述方法:
public void listen (WebDriver driver) {
// some kind of listner that waits for any changes to happen in HTML
if (changed) getContentPage(driver);
else keeplistning()
}
我不确定是否有一种方法可以跟踪页面上的所有更改,我不确定您是否需要这个,因为这会触发您进行许多不相关的更改。
此处有用的是跟踪某些特定相关 元素的更改。
因此,要等到某些特定元素发生更改,您可以使用 refreshed
ExpectedCondition
,如下所示:
WebElement button = driver.findElement(By.id("myBtn"));
wait.until(ExpectedConditions.refreshed(button));
如果你想监控多个元素,它会是这样的:
wait.until(ExpectedConditions.or(
ExpectedConditions.refreshed(element1),
ExpectedConditions.refreshed(element2),
ExpectedConditions.refreshed(element3)));
当然,您应该根据您的具体代码用途将其包装在某种方法中。我这里只写了基本思路。
UPD
要跟踪整个页面,您可以使用 driver.getPageSource();
方法。以一定的时间间隔轮询页面状态并将此方法的先前结果的值与新结果进行比较将为您提供任何页面内容更改的指示。