显示进度条时如何暂停 Selenium 执行
How to pause Selenium execution when progress bar is shown
我有一个 Angular SPA 应用程序,我想将其自动化。当显示此进度条时:
<div _ngcontent-cln-c1="" class="ngx-loading-text center-center" style="top: calc(50% + 60px + 5px); color: white;">Loading...</div>
我想全局暂停 Java 代码的执行。如果此 div 可见,是否可以以某种方式暂停 Selenium?
你可以使用 webdriver 等等:
WebDriverWait wait = new WebDriverWait(driver,30);
wait.until(ExpectedConditions.stalenessOf(loadingelement)));
或
WebDriverWait wait = new WebDriverWait(driver,30);
wait.until(ExpectedConditions.invisibilityOf(loadingelement)));
以上将等到加载元素不可见或陈旧(意味着修改或删除)
您还可以使用:
List<WebElement> elementName = driver.findElements(By.xpath("//div[@class=\"ngx-loading-text center-center\"]"));
while(elementlist.size()){
Thread.sleep(1000)
elementName = driver.findElements(By.xpath("//div[@class=\"ngx-loading-text center-center\"]"));
}
以上代码将检查 findelements 列表是否为空,否则等待 1 秒,然后再次尝试查找,循环继续直到大小为 0
invisibilityOf()
invisibilityOf(WebElement element)
定义为:
public static ExpectedCondition<java.lang.Boolean> invisibilityOf(WebElement element)
An expectation for checking the element to be invisible
这里的期望是,元素必须 present 以及 visible 作为前提条件,方法将等待使元素不可见。在这一点上值得一提的是,由于参数是 WebElement 类型,因此 findElement(By by)
必须成功定位元素作为前提。因此 NoSuchElementException
不能被 忽略 .
invisibilityOfElementLocated()
invisibilityOfElementLocated(By locator)
定义为:
public static ExpectedCondition<java.lang.Boolean> invisibilityOfElementLocated(By locator)
An expectation for checking that an element is either invisible or not present on the DOM.
这里的预期显然是元素已经 不可见 或 不存在 在 HTML DOM 中。在这种情况下,主要任务是元素的缺失,甚至可能在 ExpectedCondition 被调用之前或在 时间跨度期间发生 而 ExpectedCondition 处于活动状态。所以这里我们需要忽略NoSuchElementException
作为强制措施。
这个用例
要暂停程序的执行,您需要引入 and you can use either of the following :
使用invisibilityOf()
:
new WebDriverWait(driver, 20).until(ExpectedConditions.invisibilityOf(driver.findElement(By.xpath("//div[@class='ngx-loading-text center-center' and starts-with(., 'Loading')]"))));
使用invisibilityOfElementLocated()
:
new WebDriverWait(driver, 20).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[@class='ngx-loading-text center-center' and starts-with(., 'Loading')]")));
我有一个 Angular SPA 应用程序,我想将其自动化。当显示此进度条时:
<div _ngcontent-cln-c1="" class="ngx-loading-text center-center" style="top: calc(50% + 60px + 5px); color: white;">Loading...</div>
我想全局暂停 Java 代码的执行。如果此 div 可见,是否可以以某种方式暂停 Selenium?
你可以使用 webdriver 等等:
WebDriverWait wait = new WebDriverWait(driver,30);
wait.until(ExpectedConditions.stalenessOf(loadingelement)));
或
WebDriverWait wait = new WebDriverWait(driver,30);
wait.until(ExpectedConditions.invisibilityOf(loadingelement)));
以上将等到加载元素不可见或陈旧(意味着修改或删除)
您还可以使用:
List<WebElement> elementName = driver.findElements(By.xpath("//div[@class=\"ngx-loading-text center-center\"]"));
while(elementlist.size()){
Thread.sleep(1000)
elementName = driver.findElements(By.xpath("//div[@class=\"ngx-loading-text center-center\"]"));
}
以上代码将检查 findelements 列表是否为空,否则等待 1 秒,然后再次尝试查找,循环继续直到大小为 0
invisibilityOf()
invisibilityOf(WebElement element)
定义为:
public static ExpectedCondition<java.lang.Boolean> invisibilityOf(WebElement element)
An expectation for checking the element to be invisible
这里的期望是,元素必须 present 以及 visible 作为前提条件,方法将等待使元素不可见。在这一点上值得一提的是,由于参数是 WebElement 类型,因此 findElement(By by)
必须成功定位元素作为前提。因此 NoSuchElementException
不能被 忽略 .
invisibilityOfElementLocated()
invisibilityOfElementLocated(By locator)
定义为:
public static ExpectedCondition<java.lang.Boolean> invisibilityOfElementLocated(By locator)
An expectation for checking that an element is either invisible or not present on the DOM.
这里的预期显然是元素已经 不可见 或 不存在 在 HTML DOM 中。在这种情况下,主要任务是元素的缺失,甚至可能在 ExpectedCondition 被调用之前或在 时间跨度期间发生 而 ExpectedCondition 处于活动状态。所以这里我们需要忽略NoSuchElementException
作为强制措施。
这个用例
要暂停程序的执行,您需要引入
使用
invisibilityOf()
:new WebDriverWait(driver, 20).until(ExpectedConditions.invisibilityOf(driver.findElement(By.xpath("//div[@class='ngx-loading-text center-center' and starts-with(., 'Loading')]"))));
使用
invisibilityOfElementLocated()
:new WebDriverWait(driver, 20).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[@class='ngx-loading-text center-center' and starts-with(., 'Loading')]")));