- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开发一个使用 Nodejs 和 nightwatch 进行测试自动化的项目。这里的问题是测试不可靠并且会给出很多误报。我尽一切努力使它们稳定,但仍然出现错误。我浏览了一些博客,例如 https://bocoup.com/blog/a-day-at-the-races并进行了一些代码重构。有没有人有一些建议来解决这个问题。目前我有两个选择,要么用 Java 重写代码(从解决方案中删除 Nodejs 和 nightwatch,因为我对 Java 比 Javascript 更熟悉。大多数时候,与 Javascript 的非阻塞性质作斗争)或采用快照/查看应用程序日志/一次运行一个测试。
测试环境:-
我得到的错误类型是找不到元素。大多数情况下,页面加载后测试就会失败。我已经设置了80秒的超时时间,所以时间不会有问题。这些测试是并行运行的,但在单独的虚拟机上,所以我不知道它是否会出现问题。
编辑 1:-正在研究这个问题以了解根本原因。我做了以下事情来消除随机失败:-A。添加了 --suiteRetries 以重试失败的案例。b.查看错误屏幕截图和 DOM 源。一切看起来都很好。C。用显式等待替换 browser.pause
此外,在调试时我观察到一个问题,也许这就是导致随机故障的问题。这是代码片段
for (var i = 0; i < apiResponse.data.length; i++) {
var name = apiResponse.data[i];
browser.useXpath().waitForElementVisible(pageObject.getDynamicElement("@topicTextLabel", name.trim()), 5000, false);
browser.useCss().assert.containsText(
pageObject.getDynamicElement("@topicText", i + 1),
name.trim(),
util.format(issueCats.WRONG_DATA)
);
}
我添加了 xpath 检查来验证我是否等待足够的时间来显示该文本。我观察到可见断言正在通过,但在下一个断言中,@topicText 将作为先前的值或 null。这是一个间歇性问题,但在测试服务器上经常发生。
最佳答案
没有什么 Elixir 可以让 UI 端到端测试变得脆弱。在理想的情况下,会有一个选项 setvoid_random_failures=true
可以快速轻松地解决问题,但目前这只是一个梦想。
简单地用 Java 重写所有测试并不能解决问题,但如果你感觉 Java 更好,那么我肯定会朝这个方向发展。
<小时/>正如您从本文中已经知道的那样 Avoiding random failures in Selenium UI tests UI 测试中有 3 种常用的竞争条件避免技术:
sleep
WebDriver: Advanced Usage 上也简要提到了这些技术。 ,您还可以在这里阅读有关它们的信息:Tips to Avoid Brittle UI Tests
方法 1 和 2 一般不推荐,它们有缺点,在简单的 HTML 页面上可以很好地工作,但在 AJAX 页面上并不是 100% 可靠,并且它们会减慢测试速度。最好的一个是 #3 - 显式等待。
<小时/>为了使用技术#3(显式等待),您需要熟悉并熟悉以下 WebDriver 工具(我指的是他们的 java 版本,但他们有其他语言的对应版本):
ExpectedConditions
有许多预定义的等待状态,最常用的(根据我的经验)是 ExpectedConditions#elementToBeClickable它会等待某个元素可见并启用,以便您可以单击它。
如何使用它 - 一个示例:假设您打开一个带有表单的页面,其中包含多个要输入数据的字段。通常等到第一个字段出现在页面上并且可以编辑(可单击)就足够了:
By field1 = By.xpath("//div//input[.......]");
By field2 = By.id("some_id");
By field3 = By.name("some_name");
By buttonOk = By.xpath("//input[ text() = 'OK' ]");
....
....
WebDriwerWait wait = new WebDriverWait( driver, 60 ); // wait max 60 seconds
// wait max 60 seconds until element is visible and enabled such that you can click it
// if you can click it, that means it is editable
wait.until( ExpectedConditions.elementToBeClickable( field1 ) ).sendKeys("some data" );
driver.findElement( field2 ).sendKeys( "other data" );
driver.findElement( field3 ).sendKeys( "name" );
....
wait.until( ExpectedConditions.elementToBeClickable( buttonOK)).click();
上面的代码会等到页面加载和呈现后 field1
变得可编辑 - 但不再是这样,只要它是 neccesarry 即可。如果该元素在 60 秒后不可见且不可编辑,则测试将失败并显示 TimeoutException
。
通常只需要等待页面上的第一个字段,如果它变为事件状态,那么其他字段也会变为事件状态。
关于node.js - 测试服务器上的 Selenium 测试随机失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47362779/
谁能解释一下 Server.MapPath(".")、Server.MapPath("~")、Server.MapPath(@"之间的区别\") 和 Server.MapPath("/")? 最佳答案
我不知道,为什么我们要使用 Server.UrlEncode() & Server.UrlDecode()?!在 QueryString 中我们看到 URL 中的任何内容,那么为什么我们要对它们进行编
我已经通过 WHM 在我的一个域上安装了 ssl 证书。网站正在使用 https://xyz.com . 但是它不适用于 https://www.xyz.com .我已经检查了证书,它也适用于 www
我已经使用 WMI 检测操作系统上是否存在防病毒软件,itz 正常工作并通过使用命名空间向我显示防病毒信息,例如 win xp 和 window7 上的名称和实例 ID:\root\SecurityC
我们有 hive 0.10 版本,我们想知道是否应该使用 Hive Server 1 或 Hive Server2。另一个问题是连接到在端口 10000 上运行的 Hive 服务器,使用 3rd 方工
我想在 C++ 中使用 Windows Server API 设置一个 HTTPS 服务器,我使用了示例代码,它在 HTTP 上工作正常,但我就是不能让它在 HTTPS 上工作。 (我不想要客户端 S
我写了一个非常基本的类来发送电子邮件。我用 smtp 服务器对其进行了测试,它工作正常,但是当我尝试使用我公司的交换服务器时,它给出了这个异常: SMTP 服务器需要安全连接或客户端未通过身份验证。服
我的应用程序包含一个“网关”DataSnap REST 服务器,它是所有客户端的第一个访问点。根据客户端在请求中传递的用户名(基本身份验证),请求需要重定向到另一个 DataSnap 服务器。我的问题
我有一个 Tomcat 服务器和一个 Glassfish4 服务器。我的 Servlet 在 Tomcat 服务器上启动得很好,但在 Glassfish4 服务器上给我一个“HTTP Status 4
我在 vmware 上创建了一个 ubuntu 服务器。我用它作为文件服务器。如果我通过托管虚拟机的计算机进行连接,则可以访问它。我无法从同一网络上的其他计算机执行此操作。提前致谢! 最佳答案 首先确
如何重启 Rails 服务器?我从 开始 rails server -d 所以服务器是分离的 我知道的唯一方法就是去做ps 辅助 | grep rails 并 kill -9关于过程#但是像这样杀死进
我实际上正在尝试找到编写一个简单的 XMPP 服务器的最佳方法,或者找到一个占用空间非常小的服务器。我只关心XMPP的核心功能(状态、消息传递、群组消息传递)。目前还在学习 XMPP 协议(proto
我实际上正在尝试找到编写简单 XMPP 服务器的最佳方法,或者找到一个占用空间非常小的方法。我只关心 XMPP 的核心功能(统计、消息、组消息)。目前也在学习 XMPP 协议(protocol),所以
我们正在尝试从 Java JAX-RS 适配器访问 SOAP 1.1 Web 服务。 我们正在使用从 WSDL 生成的 SOAP 客户端。 但是当解码 SOAP 故障时,我们得到以下异常: ... C
目前,我和许多其他人正在多个平台(Windows、OS X 和可能的 Linux)上使用 Python HTTP 服务器。我们正在使用 Python HTTP 服务器来测试 JavaScript 游戏
我有一个连续运行的服务器程序(C#/.NET 2.0 on Linux with mono),我想从 PHP 脚本连接到它以在网站上显示状态信息。 目的是创建一个(某种)实时浏览器游戏(无 Flash
所以我有一个单页客户端应用程序。 正常流程: 应用程序 -> OAuth2 服务器 -> 应用程序 我们有自己的 OAuth2 服务器,因此人们可以登录应用程序并获取与用户实体关联的 access_t
我们刚刚将测试 Web 服务器从 Server 2008 升级到 Server 2012 R2。我们有一个部署我们网站的批处理脚本。当它将站点推送到服务器时,它现在失败了。奇怪的是,我可以使用相同的发
建议一些加载SpagoBI服务器的方法,我尝试了所有方法来解析spagobi服务器。在 Catalina 中,错误是 - * SEVERE: Unable to process Jar entry [
当我们点击应用程序服务器(apache tomcat)时,它会创建一个线程来处理我们的请求并与 tomcat 连接,建立连接,tomcat 创建另一个线程来处理请求并将其传递给连接,连接线程将其传递给
我是一名优秀的程序员,十分优秀!