如何确定If语句判断条件以区分Browserstack与本地测试环境
解决方案
以下是两种可直接落地的判断实现方式:
方式1:直接通过驱动的远程地址判断
直接读取IOSDriver自带的RemoteAddress属性匹配Browserstack的Hub地址即可,无需额外定义变量:
// 判断当前连接的Hub地址是否为Browserstack地址 if (!_IOSdriver.RemoteAddress.ToString().Contains("hub-cloud.browserstack.com")) { var foundElement = (_IOSdriver.FindElementsByXPath(elementXPath)); Assert.IsNotNull(foundElement); // 本地环境判断逻辑 } else { IReadOnlyList<IOSElement> allTextViewElements = _IOSdriver.FindElementsByXPath(elementXPath); // 基于查询结果设置Browserstack测试任务状态 if ((allTextViewElements.Count > 0)) { ((IJavaScriptExecutor)_IOSdriver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"passed\", \"reason\": \" Results found! \"}}"); } else { ((IJavaScriptExecutor)_IOSdriver).ExecuteScript("browserstack_executor: {\"action\": \"setSessionStatus\", \"arguments\": {\"status\":\"failed\", \"reason\": \" Results not found!\"}}"); } }
注意:你原有代码的逻辑分支写反了,带
browserstack_executor脚本的逻辑才是Browserstack环境需要执行的,所以判断条件匹配到Browserstack地址时走else分支,你也可以调整分支顺序让逻辑更直观。
方式2:初始化时预定义环境标识
在初始化_IOSDriver的阶段就定义全局布尔变量标记当前环境,后续判断逻辑更简单,可维护性更高:
// 初始化Driver阶段定义标识 bool isRunningOnBrowserstack = true; // 用Browserstack URI初始化时设为true,本地环境设为false // 后续判断直接调用该变量即可 if (!isRunningOnBrowserstack) { // 本地环境逻辑 } else { // Browserstack环境逻辑 }
内容的提问来源于stack exchange,提问作者HANSTKE
相关产品推荐
相关产品推荐

