显示进度条时如何暂停 Selenium 执行

     2023-02-21     153

关键词:

【中文标题】显示进度条时如何暂停 Selenium 执行【英文标题】:How to pause Selenium execution when progress bar is shown 【发布时间】:2021-04-27 10:11:54 【问题描述】:

我有一个想要自动化的 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?

【问题讨论】:

可能想尝试使用 WebDriverEventListeners:selenium.dev/selenium/docs/api/java/org/openqa/selenium/support/… 能否请您告诉我如何全局配置它以等待Loading... 文本并暂停执行? 配置以下选项/答案之一以使用 webdrivereventlistener(或 2 个?)运行取决于这可能出现的时间。它们是相当新的,所以我真的不知道它们的支持程度以及它们是否可以满足您的需求。您也可以将它们构建成一种“驱动程序”类,以便在任何驱动程序操作之前运行。构建适合您需求的架构。请务必考虑 loading... 元素加载/出现所需的时间。 【参考方案1】:

您可以使用 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 列表是否为空 else wai 1 秒然后尝试再次查找,循环继续直到 size 为 0

【讨论】:

【参考方案2】:

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 被调用之前或在 timespan 期间发生,而 ExpectedCondition 处于活动状态。所以这里我们需要忽略NoSuchElementException作为强制措施。


这个用例

要暂停程序的执行,您需要诱导WebDriverWait,您可以使用以下任一Locator Strategies:

使用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')]")));

【讨论】:

如何在使用 Selenium 自动执行测试时处理在调试器中暂停的覆盖

】如何在使用Selenium自动执行测试时处理在调试器中暂停的覆盖【英文标题】:HowtodealwiththeoverlayPausedindebuggerwhileautomatedtestexecutionusingSelenium【发布时间】:2019-10-2511:48:02【问题描述】:每次我尝试访问此website并打开google-chrome-dev... 查看详情

进度条加载消失

...doBackground()中的所有方法。我使用了Thread.sleep,加载程序显示它之后它会暂停执行所有方法,然后返回到下一个活动publicclassLoadDataForActivityextendsAsyncTask<Void,Void,Void&g 查看详情

尝试从外部脚本更新进度条时,QWidget 变得无响应[重复]

】尝试从外部脚本更新进度条时,QWidget变得无响应[重复]【英文标题】:QWidgetbecomesunresponsivewhentryingtoupdateprogressbarfromexternalscript[duplicate]【发布时间】:2019-07-3016:05:58【问题描述】:我正在尝试学习如何在我的for循环在外部脚本... 查看详情

使用子菜单上的滚动条时如何显示子菜单?

】使用子菜单上的滚动条时如何显示子菜单?【英文标题】:howtoshowsub-menuwhenusingthescrollbaronasubmenu?【发布时间】:2016-12-0708:39:39【问题描述】:当我有滚动条时,我的子菜单不显示。我正在使用引导程序这是我的html代码:<ata... 查看详情

QWidget::repaint:更新进度条时检测到递归重绘

】QWidget::repaint:更新进度条时检测到递归重绘【英文标题】:QWidget::repaint:Recursiverepaintdetectedwhenupdatingprogressbar【发布时间】:2014-09-0821:06:38【问题描述】:我的Qt应用程序有多个线程。其中一个调用ui-&gt;SyncUI(),其中ui是class... 查看详情

python和selenium怎么判断进度条

...个tdqm()即可。执行上一步的操作,就可以观察到进度条。selenium:拿到浏览器滚动条的js代码,然后执行,就可以看到进度条.通过模拟键盘的形式去滚动屏幕,就可以看到进度条其中通过driver.execute_script()执行js代码时,可以... 查看详情

Seekbar进度drawable异常行为onPause

...【发布时间】:2016-08-0918:51:14【问题描述】:我在片段中显示了一个搜索栏。搜索栏具有自定义拇指和进度可绘制对象。它们显示得很好,但是当我暂停活动并返回它时,进度条宽度奇怪地增加到拇指的相同高度!我找不到这个... 查看详情

selenium 运行测试时如何显示 Snackbar?

】selenium运行测试时如何显示Snackbar?【英文标题】:HowtodisplaySnackbarwhileseleniumisrunningtest?【发布时间】:2019-08-1820:19:03【问题描述】:我想在selenium测试运行时显示快餐栏。但据我所知,我需要一个html页面,这样我就可以为小吃... 查看详情

如何在 tableViewCell 中控制 AVPlayer(通过滑块和搜索播放、暂停、进度)?

...在tableViewCell中控制AVPlayer(通过滑块和搜索播放、暂停、进度)?【英文标题】:HowtocontrolAVPlayerinatableViewCell(Play,Pause,Progressviasliderandseek)?【发布时间】:2018-07-2607:34:41【问题描述】:我正在尝试使用AVPlayerLayer和AVPlayer使tableViewC... 查看详情

selenium怎么查找定位鼠标移上去显示,移开鼠标就消失的内容

场景:鼠标移动到一级菜单上二级菜单才显示,移开鼠标二级菜单就消失,如何查找定位二级菜单 操作:1.打开F12,点击sources2.鼠标移动到一级菜单“工单管理”3.按下键盘“Ctrl+”,暂停运行。等待3s,暂停框出... 查看详情

winform程序在执行一个方法的同时,如何使用progressbar显示进度?

...方法的执行过程中让progressbar的Value不断增加,从而达到显示进度的目的。比如:progressbar.MaxValue=Count;progressbar.Value=0;for(inti=0;i<Count;i++)你要做的操作progressbar.value++;你还可以在timer或新建一个线程,在里面根据相应的值,去... 查看详情

selenium怎么查找定位鼠标移上去显示,移开鼠标就消失的内容

场景:鼠标移动到一级菜单上二级菜单才显示,移开鼠标二级菜单就消失,如何查找定位二级菜单 操作:1.打开F12,点击sources2.鼠标移动到一级菜单“工单管理”3.按下键盘“Ctrl+”,暂停运行。等待3s,暂停框出... 查看详情

Android - 在 AsyncTask 执行时显示进度对话框

】Android-在AsyncTask执行时显示进度对话框【英文标题】:Android-ShowprogressdialogwhileAsyncTaskexecutes【发布时间】:2019-12-3115:13:50【问题描述】:我有以下课程,它调用一个发送电子邮件的Web服务,这可能需要5秒,具体取决于连接。这... 查看详情

alpha版本测试报告

...度条控制音乐进度调整当前播放进度N时长当前播放时长显示当前播放时长Y播放结束音乐播放结束显示时长为00:00Y(2)测试记录本次采用黑盒手工测试方法。打开Web界面正常添加音乐文件正常播放音乐正常暂停音乐正常调控音乐... 查看详情

qtcreatot中嫉妒条是如何设计的,尤其是鼠标靠近进度条是,有段还有个取消按钮。

QTCreator中进度条是如何设计的,尤其是鼠标靠近进度条时,右端还有个取消按钮。这个取消按钮如何嵌入到进度条中来支持取消呢?首先在designer中拖一个按钮和进度条部件,按下面初始化ui->progressBar->setRange(0,50000-1); ui-&g... 查看详情

web自动化中页面多个滚动条时的拖动操作?

...统...UI自动化中经常会遇到元素识别不到,找不到的问题...selenium 查看详情

mvc如何做到在网页上播放flash,最好有播放进度条,快进,暂停等???

最好有具体代码,,新手第三方组件也行,,找一个第三方的Flash播放器,嵌入页面即可。追问我想播放swf格式文件,带进度条……给个播放器链接??躲歇…………参考技术A播放器是用flash做的,和用什么架构没关系。 查看详情

如何将 curl 上传进度发送到要显示的 ajax

】如何将curl上传进度发送到要显示的ajax【英文标题】:Howtosendcurluploadprogresstoajaxtobedisplayed【发布时间】:2016-03-2216:47:47【问题描述】:我要做的是使用ajax将文件/文件信息上传到upload.php,然后通过curl将相同的信息再次上传到... 查看详情