请问如何通过 Playwright E2E 库获取文本选择器的父元素。
是修改选择器(它是类似 的字符串>> //:parent)还是评估选择器然后调用 DOM 元素更好?
(选择器内容未知)
谢谢。
我正在使用 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.
我\xe2\x80\x99一直在尝试将浏览器Chromium和Firefox的默认语言(在使用CodeceptJS + Playwright作为运行器并行运行的自动化测试中)更改为法语,但没有成功。在Chromium中,我\xe2\x80\x99ve尝试使用args --lang但没有成功,并且我\xe2\x80\x99ve也尝试使用prefs:intl.accept_languages。在 Firefox 中,我尝试使用 firefoxUserPrefs。到目前为止,没有任何效果。\n有人知道如何更改使用 playwright 启动的浏览器中的默认语言吗?
\nCodeceptJS 版本 3.0.6
\n剧作家版本1.10.0
\nChrome 版本 90.0.4430.0
\n火狐版本 87.0b10
\ncodecept.conf.js - 完整打印屏幕\n codecept.conf.js
\nPlaywright: {\n url: process.env.baseUrl || DEFAULT_HOST,\n show: true,\n browser: \'chromium\',\n waitForAction: 250,\n waitForNavigation: \'networkidle0\',\n chromium: { \n channel: process.env.BROWSER,\n args: [\'--lang=fr-CA\'],\n prefs: {\n \'intl.accept_languages\': \'fr-CA\',\n },\n firefoxUserPrefs: {\n \'intl.accept_languages\': \'fr-CA, fr\',\n },\n },\n}, \nRun Code Online (Sandbox Code Playgroud)\n cross-browser selenium-chromedriver codeceptjs geckodriver playwright
test.beforeAll(async ({ page }) => {
// Go to the starting url before each test.
await page.goto('https://my.start.url/');
});
Run Code Online (Sandbox Code Playgroud)
playwright-test runner 中有没有一种很好的方法来设置浏览器并导航到与页面对象相关的页面以运行该文件中的测试?
如果可能的话,我想避免为每个人做这个“test.beforeEach”。目前在剧作家测试中不可能做到这一点,但在开玩笑中是可能的。有任何想法吗?
Property 'page' does not exist on type 'PlaywrightWorkerArgs & PlaywrightWorkerOptions'.
Run Code Online (Sandbox Code Playgroud) 我在 Javascript 代码中使用 jest 进行测试时遇到错误。
\n错误:
\n失败 src/test/testPlaywright.test.jsx (5.779 秒)\n\xc3\x97 创建与剧作家交互的快照 (149 毫秒)
\n\xe2\x97\x8f 创建与剧作家交互的快照
\nbrowserType.launch: setImmediate is not defined\n\n 4 | for(const browserType of [chromium, firefox, webkit]){\n 5 | console.log("Testing");\n> 6 | const browser = await browserType.launch({headless: false});\n | ^\n 7 | const page = await browser.newPage();\n 8 | await page.setDefaultNavigationTimeout(1000000);\n 9 | await page.goto('https://app.wien.gv.at/navigation/', { waitUntil: 'networkidle' });\n\n at Object.<anonymous> (src/test/testPlaywright.test.jsx:6:43)\nRun Code Online (Sandbox Code Playgroud)\n测试套件: 1 次失败,总共 1 次\n测试: 1 次失败,总共 1 次\n快照: 总共 0 个\n时间: …
我在 nodejs 中使用 playwright,在获取页面文本或 Html 时遇到一些问题。我只想将 url 作为字符串获取,例如:<html><div class="123"><a>link</a>something</div><div>somethingelse</div></hmtl>
const browser = await playwright.chromium.launch({
headless: true,
});
const page = await browser.newPage();
await page.goto(url);
Run Code Online (Sandbox Code Playgroud)
我试图使用const pageText = page.$('div').innerText;和const pageText2 = await page.$$eval('div', el => el.innerText);
但两者都不起作用,只是给我未定义。
A 将多个测试文件放入扩展名为 spec.ts 的特定文件夹中,我如何使用 Playwright 运行特定文件。当前配置设置为测试文件夹并将运行其中的所有文件(测试):
testDir: './smokeTests',
假设这是配置文件中的某个选项,但问题是哪个选项
我在 Playwright 1.18 toBeVisible() 期望中遇到了不明确的行为。这是测试行:
await expect(this.page.locator('.top-row .close i')).toBeVisible({timeout: 2000 })
Run Code Online (Sandbox Code Playgroud)
如果该元素不可见,它将永远挂起。
如果我跳到代码中toBeTruthy.js -> toBeTruthy,我会看到尽管收到了选项,超时仍计算为 0:
由于某种原因,当前超时_toMatchText。这是一个错误还是我做错了什么?
包.json:
"devDependencies": {
"@playwright/test": "^1.18",
"allure-commandline": "^2.17.2",
"allure-playwright": "^2.0.0-beta.14",
"rimraf": "3.0.2"
}
Run Code Online (Sandbox Code Playgroud)
编剧配置:
import { PlaywrightTestConfig, devices } from '@playwright/test';
const config: PlaywrightTestConfig = {
testDir: './spec',
timeout: 10 * 1000,
expect: {
timeout: 3 * 1000
},
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
workers: process.env.CI ? 5 : 1,
reporter: [
['line'],
['json', { outputFile: './test-results/results.json' …Run Code Online (Sandbox Code Playgroud) 我想检查文本是否QUEUED出现在网站上。我尝试了以下命令
await expect(page1).toContainText('[QUEUED]');
await expect(page1.locator('span')).toContainText('[QUEUED]');
Run Code Online (Sandbox Code Playgroud)
但在第一个例子中,它说需要一个“定位器”,而对于第二个例子,它说
Error: strict mode violation: "span" resolved to 108 elements:
Run Code Online (Sandbox Code Playgroud)
我对确切的元素不感兴趣,我只想检查文本是否QUEUED在页面上至少出现一次。
我还尝试选择 HTML DOM 中看起来像的确切元素
<span data-v-729cd282="" class="">QUEUED</span>
Run Code Online (Sandbox Code Playgroud)
使用表达式
await expect(page1.locator('(//span[@data-v-729cd282])[6]')).toHaveText('[QUEUED]');
Run Code Online (Sandbox Code Playgroud)
但这里我也得到一个错误
waiting for selector "(//span[@data-v-729cd282])[6]"
Run Code Online (Sandbox Code Playgroud)
那么如何正确地做到这一点呢?
寻求有关该主题的帮助。有一个使用 nrwl 构建的 Angular 项目,其中包括 Playwright e2e 测试。但是,我无法扩展现有的单元测试(基于 Jest 且开箱即用)以实现 SonarCloud 中 Playwright 的正确代码覆盖率。
我将非常感谢任何类型的帮助或参考,我怎样才能实现这样的配置
我尝试了解决方案: https: //playwright.dev/docs/api/class-coverage ,但是当源映射与角度和 v8 代码覆盖率存在一些差异时,因此对话失败也尝试过: https://github .com/anishkny/playwright-test-coverage 这是我的错我无法直接访问 babelrc 文件(因为 nrwl monorepo)
playwright ×10
javascript ×4
angular ×1
babeljs ×1
c# ×1
codeceptjs ×1
e2e-testing ×1
geckodriver ×1
jestjs ×1
node.js ×1
nrwl-nx ×1
testing ×1
typescript ×1