Best Puppeteer-sharp code snippet using PuppeteerSharp.ElementHandle.BoundingBoxAsync
ElementHandle.cs
Source:ElementHandle.cs  
...104        /// <param name="options">Screenshot options.</param>105        public async Task<string> ScreenshotBase64Async(ScreenshotOptions options)106        {107            var needsViewportReset = false;108            var boundingBox = await BoundingBoxAsync().ConfigureAwait(false);109            if (boundingBox == null)110            {111                throw new PuppeteerException("Node is either not visible or not an HTMLElement");112            }113            var viewport = Page.Viewport;114            if (viewport != null && (boundingBox.Width > viewport.Width || boundingBox.Height > viewport.Height))115            {116                var newRawViewport = JObject.FromObject(viewport);117                newRawViewport.Merge(new ViewPortOptions118                {119                    Width = (int)Math.Max(viewport.Width, Math.Ceiling(boundingBox.Width)),120                    Height = (int)Math.Max(viewport.Height, Math.Ceiling(boundingBox.Height))121                });122                await Page.SetViewportAsync(newRawViewport.ToObject<ViewPortOptions>()).ConfigureAwait(false);123                needsViewportReset = true;124            }125            await ExecutionContext.EvaluateFunctionAsync(@"function(element) {126                element.scrollIntoView({ block: 'center', inline: 'center', behavior: 'instant'});127            }", this).ConfigureAwait(false);128            await ScrollIntoViewIfNeededAsync().ConfigureAwait(false);129            boundingBox = await BoundingBoxAsync().ConfigureAwait(false);130            if (boundingBox == null)131            {132                throw new PuppeteerException("Node is either not visible or not an HTMLElement");133            }134            var getLayoutMetricsResponse = await Client.SendAsync<GetLayoutMetricsResponse>("Page.getLayoutMetrics").ConfigureAwait(false);135            var clip = boundingBox;136            clip.X += getLayoutMetricsResponse.LayoutViewport.PageX;137            clip.Y += getLayoutMetricsResponse.LayoutViewport.PageY;138            options.Clip = boundingBox.ToClip();139            var imageData = await Page.ScreenshotBase64Async(options).ConfigureAwait(false);140            if (needsViewportReset)141            {142                await Page.SetViewportAsync(viewport).ConfigureAwait(false);143            }144            return imageData;145        }146        /// <summary>147        /// Scrolls element into view if needed, and then uses <see cref="Page.Mouse"/> to hover over the center of the element.148        /// </summary>149        /// <returns>Task which resolves when the element is successfully hovered</returns>150        public async Task HoverAsync()151        {152            await ScrollIntoViewIfNeededAsync().ConfigureAwait(false);153            var (x, y) = await ClickablePointAsync().ConfigureAwait(false);154            await Page.Mouse.MoveAsync(x, y).ConfigureAwait(false);155        }156        /// <summary>157        /// Scrolls element into view if needed, and then uses <see cref="Page.Mouse"/> to click in the center of the element.158        /// </summary>159        /// <param name="options">click options</param>160        /// <exception cref="PuppeteerException">if the element is detached from DOM</exception>161        /// <returns>Task which resolves when the element is successfully clicked</returns>162        public async Task ClickAsync(ClickOptions options = null)163        {164            await ScrollIntoViewIfNeededAsync().ConfigureAwait(false);165            var (x, y) = await ClickablePointAsync().ConfigureAwait(false);166            await Page.Mouse.ClickAsync(x, y, options).ConfigureAwait(false);167        }168        /// <summary>169        /// Uploads files170        /// </summary>171        /// <param name="filePaths">Sets the value of the file input these paths. paths are resolved using <see cref="Path.GetFullPath(string)"/></param>172        /// <remarks>This method expects <c>elementHandle</c> to point to an <c>input element</c> <see href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input"/> </remarks>173        /// <returns>Task</returns>174        public Task UploadFileAsync(params string[] filePaths)175        {176            var files = filePaths.Select(Path.GetFullPath).ToArray();177            var objectId = RemoteObject[MessageKeys.ObjectId].AsString();178            return Client.SendAsync("DOM.setFileInputFiles", new { objectId, files });179        }180        /// <summary>181        /// Scrolls element into view if needed, and then uses <see cref="Touchscreen.TapAsync(decimal, decimal)"/> to tap in the center of the element.182        /// </summary>183        /// <exception cref="PuppeteerException">if the element is detached from DOM</exception>184        /// <returns>Task which resolves when the element is successfully tapped</returns>185        public async Task TapAsync()186        {187            await ScrollIntoViewIfNeededAsync().ConfigureAwait(false);188            var (x, y) = await ClickablePointAsync().ConfigureAwait(false);189            await Page.Touchscreen.TapAsync(x, y).ConfigureAwait(false);190        }191        /// <summary>192        /// Calls <c>focus</c> <see href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus"/> on the element.193        /// </summary>194        /// <returns>Task</returns>195        public Task FocusAsync() => ExecutionContext.EvaluateFunctionAsync("element => element.focus()", this);196        /// <summary>197        /// Focuses the element, and sends a <c>keydown</c>, <c>keypress</c>/<c>input</c>, and <c>keyup</c> event for each character in the text.198        /// </summary>199        /// <param name="text">A text to type into a focused element</param>200        /// <param name="options">type options</param>201        /// <remarks>202        /// To press a special key, like <c>Control</c> or <c>ArrowDown</c> use <see cref="ElementHandle.PressAsync(string, PressOptions)"/>203        /// </remarks>204        /// <example>205        /// <code>206        /// elementHandle.TypeAsync("#mytextarea", "Hello"); // Types instantly207        /// elementHandle.TypeAsync("#mytextarea", "World", new TypeOptions { Delay = 100 }); // Types slower, like a user208        /// </code>209        /// An example of typing into a text field and then submitting the form:210        /// <code>211        /// var elementHandle = await page.GetElementAsync("input");212        /// await elementHandle.TypeAsync("some text");213        /// await elementHandle.PressAsync("Enter");214        /// </code>215        /// </example>216        /// <returns>Task</returns>217        public async Task TypeAsync(string text, TypeOptions options = null)218        {219            await FocusAsync().ConfigureAwait(false);220            await Page.Keyboard.TypeAsync(text, options).ConfigureAwait(false);221        }222        /// <summary>223        /// Focuses the element, and then uses <see cref="Keyboard.DownAsync(string, DownOptions)"/> and <see cref="Keyboard.UpAsync(string)"/>.224        /// </summary>225        /// <param name="key">Name of key to press, such as <c>ArrowLeft</c>. See <see cref="KeyDefinitions"/> for a list of all key names.</param>226        /// <param name="options">press options</param>227        /// <remarks>228        /// If <c>key</c> is a single character and no modifier keys besides <c>Shift</c> are being held down, a <c>keypress</c>/<c>input</c> event will also be generated. The <see cref="DownOptions.Text"/> option can be specified to force an input event to be generated.229        /// </remarks>230        /// <returns></returns>231        public async Task PressAsync(string key, PressOptions options = null)232        {233            await FocusAsync().ConfigureAwait(false);234            await Page.Keyboard.PressAsync(key, options).ConfigureAwait(false);235        }236        /// <summary>237        /// The method runs <c>element.querySelector</c> within the page. If no element matches the selector, the return value resolve to <c>null</c>.238        /// </summary>239        /// <param name="selector">A selector to query element for</param>240        /// <returns>Task which resolves to <see cref="ElementHandle"/> pointing to the frame element</returns>241        public async Task<ElementHandle> QuerySelectorAsync(string selector)242        {243            var handle = await ExecutionContext.EvaluateFunctionHandleAsync(244                "(element, selector) => element.querySelector(selector)",245                this, selector).ConfigureAwait(false);246            if (handle is ElementHandle element)247            {248                return element;249            }250            await handle.DisposeAsync().ConfigureAwait(false);251            return null;252        }253        /// <summary>254        /// Runs <c>element.querySelectorAll</c> within the page. If no elements match the selector, the return value resolve to <see cref="Array.Empty{T}"/>.255        /// </summary>256        /// <param name="selector">A selector to query element for</param>257        /// <returns>Task which resolves to ElementHandles pointing to the frame elements</returns>258        public async Task<ElementHandle[]> QuerySelectorAllAsync(string selector)259        {260            var arrayHandle = await ExecutionContext.EvaluateFunctionHandleAsync(261                "(element, selector) => element.querySelectorAll(selector)",262                this, selector).ConfigureAwait(false);263            var properties = await arrayHandle.GetPropertiesAsync().ConfigureAwait(false);264            await arrayHandle.DisposeAsync().ConfigureAwait(false);265            return properties.Values.OfType<ElementHandle>().ToArray();266        }267        /// <summary>268        /// A utility function to be used with <see cref="Extensions.EvaluateFunctionAsync{T}(Task{JSHandle}, string, object[])"/>269        /// </summary>270        /// <param name="selector">A selector to query element for</param>271        /// <returns>Task which resolves to a <see cref="JSHandle"/> of <c>document.querySelectorAll</c> result</returns>272        public Task<JSHandle> QuerySelectorAllHandleAsync(string selector)273            => ExecutionContext.EvaluateFunctionHandleAsync(274                "(element, selector) => Array.from(element.querySelectorAll(selector))", this, selector);275        /// <summary>276        /// Evaluates the XPath expression relative to the elementHandle. If there's no such element, the method will resolve to <c>null</c>.277        /// </summary>278        /// <param name="expression">Expression to evaluate <see href="https://developer.mozilla.org/en-US/docs/Web/API/Document/evaluate"/></param>279        /// <returns>Task which resolves to an array of <see cref="ElementHandle"/></returns>280        public async Task<ElementHandle[]> XPathAsync(string expression)281        {282            var arrayHandle = await ExecutionContext.EvaluateFunctionHandleAsync(283                @"(element, expression) => {284                    const document = element.ownerDocument || element;285                    const iterator = document.evaluate(expression, element, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE);286                    const array = [];287                    let item;288                    while ((item = iterator.iterateNext()))289                        array.push(item);290                    return array;291                }",292                this, expression293            ).ConfigureAwait(false);294            var properties = await arrayHandle.GetPropertiesAsync().ConfigureAwait(false);295            await arrayHandle.DisposeAsync().ConfigureAwait(false);296            return properties.Values.OfType<ElementHandle>().ToArray();297        }298        /// <summary>299        /// This method returns the bounding box of the element (relative to the main frame), 300        /// or null if the element is not visible.301        /// </summary>302        /// <returns>The BoundingBox task.</returns>303        public async Task<BoundingBox> BoundingBoxAsync()304        {305            var result = await GetBoxModelAsync().ConfigureAwait(false);306            if (result == null)307            {308                return null;309            }310            var quad = result.Model.Border;311            var x = new[] { quad[0], quad[2], quad[4], quad[6] }.Min();312            var y = new[] { quad[1], quad[3], quad[5], quad[7] }.Min();313            var width = new[] { quad[0], quad[2], quad[4], quad[6] }.Max() - x;314            var height = new[] { quad[1], quad[3], quad[5], quad[7] }.Max() - y;315            return new BoundingBox(x, y, width, height);316        }317        /// <summary>...Methods.cs
Source:Methods.cs  
...168        {169            data.Logger.LogHeader();170            var frame = GetFrame(data);171            var elem = await GetElement(frame, findBy, identifier, index);172            var x = (int)(await elem.BoundingBoxAsync()).X;173            data.Logger.Log($"The X coordinate of the element is {x}", LogColors.DarkSalmon);174            return x;175        }176        [Block("Gets the Y coordinate of the element in pixels", name = "Get Position Y")]177        public static async Task<int> PuppeteerGetPositionY(BotData data, FindElementBy findBy, string identifier, int index)178        {179            data.Logger.LogHeader();180            var frame = GetFrame(data);181            var elem = await GetElement(frame, findBy, identifier, index);182            var y = (int)(await elem.BoundingBoxAsync()).Y;183            data.Logger.Log($"The Y coordinate of the element is {y}", LogColors.DarkSalmon);184            return y;185        }186        [Block("Gets the width of the element in pixels", name = "Get Width")]187        public static async Task<int> PuppeteerGetWidth(BotData data, FindElementBy findBy, string identifier, int index)188        {189            data.Logger.LogHeader();190            var frame = GetFrame(data);191            var elem = await GetElement(frame, findBy, identifier, index);192            var width = (int)(await elem.BoundingBoxAsync()).Width;193            data.Logger.Log($"The width of the element is {width}", LogColors.DarkSalmon);194            return width;195        }196        [Block("Gets the height of the element in pixels", name = "Get Height")]197        public static async Task<int> PuppeteerGetHeight(BotData data, FindElementBy findBy, string identifier, int index)198        {199            data.Logger.LogHeader();200            var frame = GetFrame(data);201            var elem = await GetElement(frame, findBy, identifier, index);202            var height = (int)(await elem.BoundingBoxAsync()).Height;203            data.Logger.Log($"The height of the element is {height}", LogColors.DarkSalmon);204            return height;205        }206        [Block("Takes a screenshot of the element and saves it to an output file", name = "Screenshot Element")]207        public static async Task PuppeteerScreenshotElement(BotData data, FindElementBy findBy, string identifier, int index,208            string fileName, bool fullPage = false, bool omitBackground = false)209        {210            data.Logger.LogHeader();211            if (data.Providers.Security.RestrictBlocksToCWD)212                FileUtils.ThrowIfNotInCWD(fileName);213            var frame = GetFrame(data);214            var elem = await GetElement(frame, findBy, identifier, index);215            await elem.ScreenshotAsync(fileName, new ScreenshotOptions 216            {...ClickerBot.cs
Source:ClickerBot.cs  
...105            await UpdateWrongQuizAnswers(frame);106            var highImportanceButtons = await frame.QuerySelectorAllAsync(".question-example-overlay:not([hidden='hidden']) .example-buttons .button:not(.is-disabled)");107            foreach (var buttonHandle in highImportanceButtons)108            {109                var boundingBox = await buttonHandle.BoundingBoxAsync();110                var isVisible = boundingBox != null && boundingBox.Width > 0 && boundingBox.Height > 0;111                if (!isVisible)112                    continue;113                var buttonText = await frame.GetInnerText(buttonHandle);114                var isCandidate = new[] { "schlieÃen" }.Any(x => buttonText.ToLower().Contains(x));115                if (isCandidate)116                    return buttonHandle;117            }118            var decisionTextHandle = await frame.QuerySelectorAllAsync(".decision-wrapper .text-column");119            if (decisionTextHandle.Any())120            {121                var decisionText = await frame.EvaluateFunctionAsync<string>("el => el.innerText", decisionTextHandle.First());122                var decisionHash = decisionText.GetHashCode();123                var choices = await frame.QuerySelectorAllAsync(".content-region .decision-choices li.choice button:not(.is-disabled)");124                Question decision = null;125                if (_decisions.Questions.All(x => x.Hash != decisionHash))126                {127                    decision = new Question { Hash = decisionHash };128                    foreach (var elementHandle in choices)129                    {130                        var choiceText = await frame.GetInnerText(elementHandle);131                        decision.Answers.Add(new Answer { Result = null, Text = choiceText });132                    }133                    _decisions.Questions.Add(decision);134                }135                else136                    decision = _decisions.Questions.Single(x => x.Hash == decisionHash);137                var bestAnswer = decision.GetBestAnswer();138                if (bestAnswer != null)139                {140                    foreach (var elementHandle in choices)141                    {142                        var boundingBox = await elementHandle.BoundingBoxAsync();143                        var isVisible = boundingBox != null && boundingBox.Width > 0 && boundingBox.Height > 0;144                        if (!isVisible)145                            continue;146                        var choiceText = await frame.EvaluateFunctionAsync<string>("e => e.innerText", elementHandle);147                        if (choiceText == bestAnswer)148                            return elementHandle;149                    }150                }151            }152            var quizChoices = await frame.QuerySelectorAllAsync(".content-region .question-choices li.choice button:not(.is-disabled)");153            if (quizChoices.Any())154            {155                var contentHash = await GetQuizHash(frame);156                var bestAnswer = _quiz.Questions.Single(x => x.Hash == contentHash).GetBestAnswer();157                if (bestAnswer != null)158                {159                    foreach (var elementHandle in quizChoices)160                    {161                        var boundingBox = await elementHandle.BoundingBoxAsync();162                        var isVisible = boundingBox != null && boundingBox.Width > 0 && boundingBox.Height > 0;163                        if (!isVisible)164                            continue;165                        var choiceText = await frame.GetInnerText(elementHandle);166                        if (choiceText == bestAnswer)167                            return elementHandle;168                    }169                }170            }171            var regularButtons = await frame.QuerySelectorAllAsync(".content-region button.action:not(.is-disabled)");172            var exampleButtons = await frame.QuerySelectorAllAsync(".example-button-container .button:not(.is-disabled)");173            var buttonHandles = regularButtons.Concat(exampleButtons).Concat(highImportanceButtons);174            foreach (var buttonHandle in buttonHandles)175            {176                var boundingBox = await buttonHandle.BoundingBoxAsync();177                var isVisible = boundingBox != null && boundingBox.Width > 0 && boundingBox.Height > 0;178                if (!isVisible)179                    continue;180                var buttonText = await frame.GetInnerText(buttonHandle);181                var isCandidate = new[] { "beginnen", "weiter", "mehr", "anzeigen", "schlieÃen", "wiederholen" }.Any(x => buttonText.ToLower().Contains(x));182                if (isCandidate)183                    return buttonHandle;184            }185            var currentCalloutHandles = await frame.QuerySelectorAllAsync(".callout-trigger.is-current");186            if (!currentCalloutHandles.Any())187            {188                var calloutHandles = await frame.QuerySelectorAllAsync(".callout-trigger.is-unlocked:not(.is-current)");189                if (calloutHandles.Any())190                    return calloutHandles.First();191            }192            else193            {194                var next = await frame.QuerySelectorAllAsync(".callout-navigation.next a");195                if (next.Any())196                {197                    var boundingBox = await next.First().BoundingBoxAsync();198                    var isVisible = boundingBox != null && boundingBox.Width > 0 && boundingBox.Height > 0;199                    if (isVisible)200                        return next.First();201                }202            }203            var bannerHandles = await frame.QuerySelectorAllAsync(".banner-wrapper.is-unlocked");204            if (bannerHandles.Any())205                return bannerHandles.First();206            var explorerHandles = await frame.QuerySelectorAllAsync(".explorer-trigger.is-unlocked:not(.is-completed)");207            if (explorerHandles.Any())208                return explorerHandles.First();209            var flashCardHandles = await frame.QuerySelectorAllAsync(".content-region article.flash-card:not(.flash-card-flipped) .flash-card-side");210            if (flashCardHandles.Any())211                return flashCardHandles.First();...Chromium.cs
Source:Chromium.cs  
...10        public async Task ScreenshotSelectorAsync (Page page, string selector, string pathFilePNG, ILogger log) {11            try {12                log.LogInformation ("Begin - ScreenshotSelectorAsync()");13                ElementHandle bodyHandle = await page.WaitForSelectorAsync ("body");14                BoundingBox bounding_box = await bodyHandle.BoundingBoxAsync ();15                await page.SetViewportAsync (new ViewPortOptions {16                    Width = Convert.ToInt32 (Math.Max (page.Viewport.Width, Math.Ceiling (bounding_box.Width))),17                        Height = Convert.ToInt32 (Math.Max (page.Viewport.Height, Math.Ceiling (bounding_box.Height))),18                });19                ElementHandle element = await page.WaitForSelectorAsync (selector);20                await element.ScreenshotAsync (pathFilePNG);21                await element.DisposeAsync ();22                log.LogInformation ("End - ScreenshotSelectorAsync()");23            } catch (Exception ex) {24                log.LogError ("Erro: {0}", ex.Message);25            }26        }27        public async Task InputSelectorAsync (Page page, string selector, string dataInput, ILogger log) {28            try {...NormalTabTest.cs
Source:NormalTabTest.cs  
...57        private static async Task AssertHeaderAsync(ElementHandle navElement, ElementHandle[] tabHeaders, int index)58        {59            var shadow = await navElement.QuerySelectorAsync("div.el-tabs__active-bar");60            Assert.NotNull(shadow);61            var shadowBoxModel = await shadow.BoundingBoxAsync();62            Assert.NotNull(shadowBoxModel);63            var activeTab = tabHeaders[index];64            var activeBoxModel = await activeTab.BoundingBoxAsync();65            Assert.NotNull(activeBoxModel);66            var barOffsetLeft = await activeTab.EvaluateFunctionAsync<float>("x=>x.offsetLeft+parseFloat(window.getComputedStyle(x).paddingLeft)");67            var shadowBoxWidth = Math.Round(shadowBoxModel.Width + 20 + ((index == 0 || index == tabHeaders.Length - 1) ? 0 : 20), 2);68            Assert.Equal(activeBoxModel.Width, shadowBoxWidth);69            var styleHandle = await shadow.GetPropertyAsync("style");70            var width = await styleHandle.EvaluateFunctionAsync<string>("s=>s.width");71            Assert.Equal($"{shadowBoxModel.Width.ToString("G29")}px", width);72            var transform = await styleHandle.EvaluateFunctionAsync<string>("x=>x.transform");73            Assert.Equal($"translateX({barOffsetLeft}px)", transform);74        }75    }76}...BoundingBox.cs
Source:BoundingBox.cs  
...3using Newtonsoft.Json;4namespace PuppeteerSharp5{6    /// <summary>7    /// Bounding box data returned by <see cref="ElementHandle.BoundingBoxAsync"/>.8    /// </summary>9    public class BoundingBox : IEquatable<BoundingBox>10    {11        /// <summary>12        /// The x coordinate of the element in pixels.13        /// </summary>14        /// <value>The x.</value>15        [JsonProperty("x")]16        public decimal X { get; set; }17        /// <summary>18        /// The y coordinate of the element in pixels.19        /// </summary>20        /// <value>The y.</value>21        [JsonProperty("y")]...pay.cshtml.cs
Source:pay.cshtml.cs  
...48                var msg = ex.Message;49            }50            if (slideBtn != null)51            {52                var rect = await slideBtn.BoundingBoxAsync();53                var left = rect.X + 10;54                var top = rect.Y + 10;55                var mouse = page.Mouse;56                await mouse.MoveAsync(left, top);57                await page.Touchscreen.TapAsync(left, top);58                await mouse.DownAsync();59                var startTime = DateTime.Now;60                await mouse.MoveAsync(left + 800, top, new PuppeteerSharp.Input.MoveOptions { Steps = 30 });61                await page.Touchscreen.TapAsync(left + 800, top);62                Console.WriteLine(DateTime.Now - startTime);63                await mouse.UpAsync();64            }65            var channel = await page.WaitForSelectorAsync("[channelcode='alipaywap']");66            await channel.ClickAsync();...BoundingBoxTests.cs
Source:BoundingBoxTests.cs  
...18                Height = 50019            });20            await Page.GoToAsync(TestConstants.ServerUrl + "/grid.html");21            var elementHandle = await Page.QuerySelectorAsync(".box:nth-of-type(13)");22            var box = await elementHandle.BoundingBoxAsync();23            Assert.Equal(new BoundingBox(100, 50, 50, 50), box);24        }25        [Fact]26        public async Task ShouldHandleNestedFrames()27        {28            await Page.SetViewportAsync(new ViewPortOptions29            {30                Width = 500,31                Height = 50032            });33            await Page.GoToAsync(TestConstants.ServerUrl + "/frames/nested-frames.html");34            var nestedFrame = Page.Frames[1].ChildFrames[1];35            var elementHandle = await nestedFrame.QuerySelectorAsync("div");36            var box = await elementHandle.BoundingBoxAsync();37            Assert.Equal(new BoundingBox(28, 260, 264, 18), box);38        }39        [Fact]40        public async Task ShouldReturnNullForInvisibleElements()41        {42            await Page.SetContentAsync("<div style='display:none'>hi</div>");43            var elementHandle = await Page.QuerySelectorAsync("div");44            Assert.Null(await elementHandle.BoundingBoxAsync());45        }46    }47}...BoundingBoxAsync
Using AI Code Generation
1using System;2using System.Threading.Tasks;3using PuppeteerSharp;4{5    {6        static async Task Main(string[] args)7        {8            await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);9            var browser = await Puppeteer.LaunchAsync(new LaunchOptions10            {11            });12            var page = await browser.NewPageAsync();13            var elementHandle = await page.QuerySelectorAsync("input[name='q']");14            var boundingBox = await elementHandle.BoundingBoxAsync();15            Console.WriteLine(boundingBox);16            await browser.CloseAsync();17        }18    }19}BoundingBoxAsync
Using AI Code Generation
1using PuppeteerSharp;2using System;3using System.Threading.Tasks;4{5    static async Task Main(string[] args)6    {7        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);8        var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = false });9        var page = await browser.NewPageAsync();10        await page.ScreenshotAsync("1.png");11        var element = await page.QuerySelectorAsync("input[name='q']");12        var box = await element.BoundingBoxAsync();13        Console.WriteLine(box);14        await browser.CloseAsync();15    }16}17{18}19using PuppeteerSharp;20using System;21using System.Threading.Tasks;22{23    static async Task Main(string[] args)24    {25        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);26        var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = false });27        var page = await browser.NewPageAsync();28        await page.PdfAsync("2.pdf");29        await browser.CloseAsync();30    }31}32using PuppeteerSharp;33using System;34using System.Threading.Tasks;35{36    static async Task Main(string[] args)37    {38        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);39        var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = false });40        var page = await browser.NewPageAsync();41        var pdf = await page.PrintToPdfAsync(new PdfOptions());42        await System.IO.File.WriteAllBytesAsync("3.pdf", pdf);43        await browser.CloseAsync();44    }45}BoundingBoxAsync
Using AI Code Generation
1var browser = await Puppeteer.LaunchAsync(new LaunchOptions2{3});4var page = await browser.NewPageAsync();5var elementHandle = await page.QuerySelectorAsync("input[name=q]");6var boundingBox = await elementHandle.BoundingBoxAsync();7Console.WriteLine($"X: {boundingBox.X}, Y: {boundingBox.Y}, Width: {boundingBox.Width}, Height: {boundingBox.Height}");8await browser.CloseAsync();9var browser = await Puppeteer.LaunchAsync(new LaunchOptions10{11});12var page = await browser.NewPageAsync();13var elementHandle = await page.QuerySelectorAsync("input[name=q]");14var boundingBox = await elementHandle.BoundingBoxAsync();15Console.WriteLine($"X: {boundingBox.X}, Y: {boundingBox.Y}, Width: {boundingBox.Width}, Height: {boundingBox.Height}");16await browser.CloseAsync();17var browser = await Puppeteer.LaunchAsync(new LaunchOptions18{19});20var page = await browser.NewPageAsync();21var elementHandle = await page.QuerySelectorAsync("input[name=q]");22var boundingBox = await elementHandle.BoundingBoxAsync();23Console.WriteLine($"X: {boundingBox.X}, Y: {boundingBox.Y}, Width: {boundingBox.Width}, Height: {boundingBox.Height}");24await browser.CloseAsync();25var browser = await Puppeteer.LaunchAsync(new LaunchOptions26{27});28var page = await browser.NewPageAsync();29var elementHandle = await page.QuerySelectorAsync("BoundingBoxAsync
Using AI Code Generation
1var boundingBoxTask = elementHandle.BoundingBoxAsync();2var boundingBox = await boundingBoxTask;3Console.WriteLine($"X: {boundingBox.X}, Y: {boundingBox.Y}, Width: {boundingBox.Width}, Height: {boundingBox.Height}");4var boundingBoxTask = page.BoundingBoxAsync("div");5var boundingBox = await boundingBoxTask;6Console.WriteLine($"X: {boundingBox.X}, Y: {boundingBox.Y}, Width: {boundingBox.Width}, Height: {boundingBox.Height}");7var boundingBoxTask = frame.BoundingBoxAsync("div");8var boundingBox = await boundingBoxTask;9Console.WriteLine($"X: {boundingBox.X}, Y: {boundingBox.Y}, Width: {boundingBox.Width}, Height: {boundingBox.Height}");10var boundingBoxTask = page.BoundingBoxAsync("div");11var boundingBox = await boundingBoxTask;12Console.WriteLine($"X: {boundingBox.X}, Y: {boundingBox.Y}, Width: {boundingBox.Width}, Height: {boundingBox.Height}");13var boundingBoxTask = frame.BoundingBoxAsync("div");14var boundingBox = await boundingBoxTask;15Console.WriteLine($"X: {boundingBox.X}, Y: {boundingBox.Y}, Width: {boundingBox.Width}, Height: {boundingBox.Height}");16var boundingBoxTask = page.BoundingBoxAsync("div");17var boundingBox = await boundingBoxTask;18Console.WriteLine($"X: {boundingBox.X}, Y: {boundingBox.Y}, Width: {boundingBox.Width}, Height: {boundingBox.Height}");19var boundingBoxTask = frame.BoundingBoxAsync("div");20var boundingBox = await boundingBoxTask;21Console.WriteLine($"X: {boundingBox.X}, Y: {boundingBox.Y}, Width: {boundingBox.Width}, Height: {boundingBox.Height}");BoundingBoxAsync
Using AI Code Generation
1var page = await browser.NewPageAsync();2var element = await page.QuerySelectorAsync("input[name='q']");3var boundingBox = await element.BoundingBoxAsync();4Console.WriteLine(boundingBox.X);5Console.WriteLine(boundingBox.Y);6Console.WriteLine(boundingBox.Width);7Console.WriteLine(boundingBox.Height);8var page = await browser.NewPageAsync();9var boundingBox = await page.BoundingBoxAsync("input[name='q']");10Console.WriteLine(boundingBox.X);11Console.WriteLine(boundingBox.Y);12Console.WriteLine(boundingBox.Width);13Console.WriteLine(boundingBox.Height);BoundingBoxAsync
Using AI Code Generation
1var browser = await Puppeteer.LaunchAsync(new LaunchOptions2{3});4var page = await browser.NewPageAsync();5var element = await page.QuerySelectorAsync("input");6var boundingBox = await element.BoundingBoxAsync();7Console.WriteLine(boundingBox);8var browser = await Puppeteer.LaunchAsync(new LaunchOptions9{10});11var page = await browser.NewPageAsync();12var element = await page.QuerySelectorAsync("input");13var boundingBox = await element.BoundingBoxAsync();14Console.WriteLine(boundingBox.X);15Console.WriteLine(boundingBox.Y);16Console.WriteLine(boundingBox.Width);17Console.WriteLine(boundingBox.Height);18var browser = await Puppeteer.LaunchAsync(new LaunchOptions19{20});21var page = await browser.NewPageAsync();22var element = await page.QuerySelectorAsync("input");23var boundingBox = await element.BoundingBoxAsync();24Console.WriteLine(boundingBox.X);25Console.WriteLine(boundingBox.Y);26Console.WriteLine(boundingBox.Width);27Console.WriteLine(boundingBox.Height);28Console.WriteLine(boundingBox.Page);29Console.WriteLine(boundingBox.ToString());Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
