Exemple #1
0
        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>());
                }
            }
        }
Exemple #5
0
        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;
 }