public override PhaseResult Run(Context context) { Int32 max = _count < 0 ? Int32.MaxValue : _count; Int32 count = 0; for (; count < max; count++) { String previous = context.LastRequestContent; PhaseResult pr = Parse.Run(context); context.PushResult(pr); pr = Click.Run(context); context.PushResult(pr); //TODO:如果JsonResult里有重复的项的时候就停止 // 如果前后的html一样 if (previous == context.LastRequestContent) { break; } } PhaseResult clickScanResult = new PhaseResult(this); clickScanResult.SetInt(Constant.RVCount, count + 1); clickScanResult.Succeed = true; return clickScanResult; }
/// <summary> /// Executes each phase supplied. /// </summary> /// <param name="script">The script to execute</param> /// <param name="ctx">The context of the runtime</param> /// <param name="phases">The list of phases.</param> /// <returns></returns> public PhaseResult Execute(string script, Context ctx, List <IPhase> phases) { if (phases == null || phases.Count == 0) { throw new ArgumentException("No phases supplied to execute"); } // 1. Create the execution phase var phaseCtx = new PhaseContext(); phaseCtx.ScriptText = script; phaseCtx.Ctx = ctx; // 2. Keep track of last phase result PhaseResult lastPhaseResult = null; foreach (var phase in phases) { // 3. Execute the phase and get it's result. phase.Ctx = ctx; lastPhaseResult = phase.Execute(phaseCtx); phase.Result = lastPhaseResult; // 4. Stop the phase execution. if (!phase.Result.Success) { break; } } return(lastPhaseResult); }
public static IPhaseResult <TMapped> Map <TResult, TMapped>( this IPhaseResult <TResult> source, Func <TResult, TMapped> onFinalValue) { return(source switch { Finished <TResult> finished => onFinalValue(finished.Value).AsFinished(), Cancelled <TResult> => PhaseResult.NeedsRetry <TMapped>(), NeedsRetry <TResult> => PhaseResult.NeedsRetry <TMapped>(), _ => throw new Exception() });
public static async Task <IPhaseResult <TResult> > HandlePhase <TResult>( PhaseMethod <TResult> logic) { while (true) { switch (await logic.Invoke()) { case Finished <TResult> finished: return(finished); case Cancelled <TResult> : return(PhaseResult.NeedsRetry <TResult>()); } } }
public override PhaseResult Run(Context context) { GeckoWebBrowser browser = (GeckoWebBrowser)context.GetService(typeof(GeckoWebBrowser)); Debug.Assert(browser != null, "browser is null"); Locator.Locator = context.Resolve(Locator.Locator); Boolean succ = RequestHelper.OperateBrowserSetFocus(browser, Locator); PhaseResult pr = new PhaseResult(this); pr.Succeed = succ; context.LastRequestContent = RequestHelper.GetGeckoContent(browser) ?? String.Empty; return pr; }
private PipelinePhase GetPipelineAndPhase( string pipelineName, Phase phase, IPipelineCollection pipelines, ConcurrentDictionary <string, PhaseResult[]> phaseResults, IDocument[] outputs, params PipelinePhase[] dependencies) { TestPipeline pipeline = new TestPipeline(); PipelinePhase pipelinePhase = new PipelinePhase(pipeline, pipelineName, phase, Array.Empty <IModule>(), NullLogger.Instance, dependencies); pipelines.Add(pipelineName, pipeline); PhaseResult[] results = new PhaseResult[4]; results[(int)Phase.Process] = new PhaseResult(pipelineName, Phase.Process, outputs.ToImmutableArray(), 0); phaseResults.TryAdd(pipelineName, results); return(pipelinePhase); }
private PipelinePhase GetPipelineAndPhase( string pipelineName, Phase currentPhase, IPipelineCollection pipelines, ConcurrentDictionary <string, PhaseResult[]> phaseResults, IDocument[] outputs, Phase phaseForOutputs, params PipelinePhase[] dependencies) { TestPipeline pipeline = new TestPipeline(); PipelinePhase pipelinePhase = new PipelinePhase(pipeline, pipelineName, currentPhase, Array.Empty <IModule>(), NullLogger.Instance, dependencies); pipelines.Add(pipelineName, pipeline); PhaseResult[] results = new PhaseResult[4]; if (outputs != null) { results[(int)phaseForOutputs] = new PhaseResult(pipelineName, phaseForOutputs, outputs.ToImmutableArray(), default, 0);
public PhaseResultAdapter(PhaseResult resultImplementation) { _resultImplementation = resultImplementation; }