我正在使用 Playwright 的 C# 语言绑定。
HTML 示例:
<select id="txtType" name="Type" class="form-control">
<option>Blog Posts</option>
<option>Books</option>
<option>Presentations</option>
<option>Videos</option>
<option>Podcasts</option>
<option>Examples</option>
</select>
Run Code Online (Sandbox Code Playgroud)
我知道我可以用来Page.SelectOptionAsync设置下拉列表的选定选项,但如何获取当前选定的选项?
当我查看 DropDown 的所有属性时,我看不出ElementHandles.
我之前在 Node.js 中使用过 Puppeteer,现在在 .Net 中使用 Microsoft.Playwright
我需要等待所有 XHR / Ajax 请求完成,以便页面处于真正的“就绪”状态。使用超时和延迟是不可靠的。
对于 Puppeteer,我使用了一个 Pending XHR Puppeteer 库https://www.npmjs.com/package/pending-xhr-puppeteer,它是专门针对这个问题设计的
所以在node.js中我会在warapper中加载页面等,然后在需要时我会调用
await pageWrapper.waitForAllXhrFinished()
Run Code Online (Sandbox Code Playgroud)
我假设它在幕后记录发送的 ajax 请求的数量,并在它们全部返回后返回该函数。
注意:对于我的场景之一,设置了 2 个 XHR 请求,它们来自完全相同的 URL。
我们如何在 Playwright for .Net 中实现这一目标?
我正在尝试使用 playwright 创建 .net 5.0 docker 映像。\n这是我的 DockerFile:
\nFROM mcr.microsoft.com/dotnet/runtime:5.0-buster-slim AS base\nWORKDIR /app\n\nFROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build\nWORKDIR /src\nCOPY ["Agent.csproj", "Agent/"]\nRUN dotnet restore "Agent/Agent.csproj"\nCOPY . "/src/Agent"\nWORKDIR "/src/Agent"\nRUN apt-get update -yq && apt-get upgrade -yq && apt-get install -yq curl git nano\nRUN curl -sL https://deb.nodesource.com/setup_16.x | bash - && apt-get install -yq nodejs build-essential\nRUN npm install -g npm\n\nRUN dotnet add package Microsoft.Playwright\nRUN dotnet build "Agent.csproj" -c Release -o /app/build\nRUN npx playwright install\nRun Code Online (Sandbox Code Playgroud)\n但是一旦我在图像命令中运行dotnet run Agent就会出现以下错误:
Executable doesn't exist …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的部署目标计算机上安装 playwright 以便运行 UI 测试。
# Install the CLI once.
dotnet tool install --global Microsoft.Playwright.CLI
playwright install
Run Code Online (Sandbox Code Playgroud)
然而,当使用 playwright CLI 包括 playwright 安装时,我得到:
找不到使用 Playwright 的项目。确保项目或解决方案存在于 C:\users\myuser 中,或使用 -p 提供另一个路径。
如何在虚拟机上安装 playwright?
编辑:
不幸的是,剧作家的 .NET nuget 包设计得不是很好。虽然 API 很棒,但部署却是一场噩梦。
您不仅无法在部署服务器上使用 CLI 安装浏览器,而且该软件包还向您的项目以及引用它的所有项目添加了 3x NodeJS 运行时 (200MB)。
阻止这些文件被发布是很重要的,并且每个构建的构建工件可以轻松增长到 1GB!
您无法配置 NodeJS 或剧作家本身的路径。
您可以在这里投票修复此问题: https ://github.com/microsoft/playwright-dotnet/issues/1850
我正在尝试使用 Playwright (.NET) 抓取一个网站。该网站看起来像是在 2000 年代初编写的(以怪异模式等运行),而我遇到了一个我似乎无法找到解决方案的问题。
我的目标是选中一个复选框。我可以input使用选择元素
var input = await page.QuerySelectorAsync("inputSelector")
Run Code Online (Sandbox Code Playgroud)
该元素已成功选择,但在尝试运行时await input.CheckAsync(),出现错误Element is not attached to the DOM。我没有注意到会导致这种情况的元素有任何异常。为什么会发生此错误?
await page.ClickAsync("inputSelector")我通过运行来检查该框来使其工作。这适用于我的目的,但它不能解释为什么如果以其他方式完成它会出错,所以我仍然想知道为什么会发生该错误。
c# webautomation playwright playwright-sharp playwright-dotnet