private static void GeneratePageObjects(DotvvmProjectMetadata dotvvmProjectMetadata,
                                                DotvvmConfiguration dotvvmConfig,
                                                Arguments arguments)
        {
            var options   = PrepareSeleniumGeneratorOptions(dotvvmConfig);
            var generator = new SeleniumPageObjectGenerator(options, dotvvmConfig);

            IEnumerable <string> controlFiles = new List <string>();
            IEnumerable <string> viewFiles;

            if (arguments[0] != null)
            {
                var parsedArguments = SplitArguments(arguments);
                viewFiles = GetViewsFiles(parsedArguments);
            }
            else
            {
                // generate all views and user controls files if no argument was specified
                viewFiles    = dotvvmConfig.RouteTable.Where(b => b.VirtualPath != null).Select(r => r.VirtualPath);
                controlFiles = dotvvmConfig.Markup.Controls.Where(b => b.Src != null).Select(c => c.Src);
            }

            var allFiles = controlFiles.Concat(viewFiles).Distinct();

            foreach (var file in allFiles)
            {
                if (File.Exists(file))
                {
                    Console.WriteLine($"Generating stub for {file}...");

                    // determine full type name and target file
                    var relativePath     = PathHelpers.GetDothtmlFileRelativePath(dotvvmProjectMetadata, file);
                    var relativeTypeName = $"{PathHelpers.TrimFileExtension(relativePath)}PageObject";
                    var fullTypeName     = $"{dotvvmProjectMetadata.UITestProjectRootNamespace}.{PageObjectsText}.{PathHelpers.CreateTypeNameFromPath(relativeTypeName)}";
                    var targetFileName   = Path.Combine(dotvvmProjectMetadata.UITestProjectPath, PageObjectsText, relativeTypeName + ".cs");

                    var config = GetSeleniumGeneratorConfiguration(fullTypeName, targetFileName, file);

                    GeneratePageObject(generator, config);
                }
            }
        }
 public SeleniumPageObjectVisitor(SeleniumPageObjectGenerator seleniumGenerator)
 {
     this.seleniumGenerator = seleniumGenerator;
     generators             = new Dictionary <Type, ISeleniumGenerator>();
 }
 private static void GeneratePageObject(SeleniumPageObjectGenerator generator,
                                        SeleniumGeneratorConfiguration config)
 => generator.ProcessMarkupFile(config);