我找不到任何从 python playwright 返回外部 html 的方法 page.locator(selector, **kwargs)。我错过了什么吗?
locator.inner_html(**kwargs)确实存在。但是,我尝试使用 pandas.read_html ,但它在表定位器内部 html 上失败,因为它触发了表标记。
我目前正在做的是使用 bs4 来解析 page.content()。就像是:
soup = BeautifulSoup(page.content(), 'lxml')
df = pd.read_html(str(soup.select('table.selector')))
Run Code Online (Sandbox Code Playgroud) 因此,我在选择另一个包含文本的元素中的元素时遇到了问题。
我有一个列表项,在列表项中我有一个带有文本和按钮的链接。所以我尝试这样做:
const listItem = this.page.locator('data-test-id=list-item:has-text('someText')')
const button = listItem.locator("data-test-id=button")
await button.click()
Run Code Online (Sandbox Code Playgroud)
但它并没有真正起作用,并且没有找到该元素。我在这里缺少什么?
剧作家专家您好,
我有这个输入字段
<input id="myName" placeholder="e.g. Max" maxlength="15" class="xyz"/>
Run Code Online (Sandbox Code Playgroud)
我试过这个JAVA代码:
page.locator("[placeholder=\"e.g. Max\"]").textContent();
Run Code Online (Sandbox Code Playgroud)
它不起作用:-(但我可以填写
page.locator("[placeholder=\"e.g. Max\"]").fill("Loren"); // this works
Run Code Online (Sandbox Code Playgroud)
你能帮忙并有一个想法吗?
先感谢您。
干杯 洛伦
我有一个必需的登录表单输入:
<input
autoComplete="email"
defaultValue={email}
disabled={state === 'submitting'}
id="email"
name="email"
placeholder={t('user-authentication:email-placeholder')}
required // HERE!
type="email"
/>
Run Code Online (Sandbox Code Playgroud)
如何测试 Playwright 是否需要输入?我在 Chromium 中的本机浏览器警告是:“请填写此字段。”
有没有办法在剧作家中检查/断言此警告?或者另一种方法来测试是否需要输入?
我尝试在输入中不写入任何内容,.fill('')然后按 Enter 键page.keyboard.press('Enter'),但这些并没有导致出现警告。
我需要通过基于 CSS 属性的过滤来使用 Playwright 选择适当的元素。在我的特定情况下,我需要过滤掉具有该属性的元素text-decoration:line-through并关注其余的元素。
这是包含元素的 DOM:
<span>
<span style="line-height:1.15 !important;display:initial;text-decoration:line-through;display:block;">0.42</span>
<span style="line-height:1.15 !important;display:initial;font-weight:bold;">0.29</span>
</span>
Run Code Online (Sandbox Code Playgroud)
(糟糕的 HTML 代码,我知道……对此我无能为力……)
在这种情况下,我需要选择 2nd span,它缺少删除线样式,但span无法预期元素的顺序和数量。
有没有办法通过单个ilocator.Locator(selector);查询来做到这一点?我需要使用单个查询来完成此操作,因为我创建的代码需要是通用的,而不是假设事物并进行“手动”过滤。一切都需要在选择器中。
如何在剧作家中无任何条件地给予固定(隐式等待)等待
就像我们在 cypress 中所做的那样:
等待(600);
谢谢
就像我们在 cypress 中所做的那样:
等待(600);
Playwright项目中更新/升级的正确方法是什么Node.js?
我试图在官方文档中找到这一点,但没有找到任何具体内容。
即我有这个简单的项目:
{
"name": "cool-tests",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@playwright/test": "^1.28.1"
}
}
Run Code Online (Sandbox Code Playgroud)
Playwright使用最新版本以及兼容的浏览器维护该项目的最佳方法是什么?
Playwright 附带的 Java 驱动程序不适用于 Alpine,因为它们不使用静态链接的 MUSL 构建。
我试图找出存储元素定位器的最佳方法,以最终使用该定位器来查找父级。
例如,在这个特定问题中,我有一个表行 ( <tr>),其上有一个唯一的文本Foo(作为<label>)。该表行还有一个复选框。看起来基本上是这样的:
(假设有一个轮廓,但这本质上是表格行布局。表格有很多行(数量不确定),所以我不能只说nth行。所以明显的独特元素是通过其文本获取元素并存储“孩子”定位器。我是这样做的:
const tableRow = page.locator('label:has-text("Foo")')
但是现在我需要抓住它的父级,即 >,<tr这样我就可以抓住要单击的复选框。
对此最好的办法是什么?Playwright 并不完全有一个“父”选择器,我能找到的最接近的是https://playwright.dev/docs/api/class-page#page-locator-option-has has选项。
所以根据我的理解,我需要做类似的事情:
const tableRow = await page.locator('tr', { has: page.locator('label:has-text("Foo")') })
await tableRow.locator('input[type="checkbox"]').check()
Run Code Online (Sandbox Code Playgroud)
或者,还有更好的方法?
作为旁注:存储定位器时,它表示await不需要关键字(上面的第一行代码)。await存储定位器时我们不需要吗?
jsfiddle: https: //jsfiddle.net/mLb50jwp/(显然是最简单的版本)
老实说我很好奇为什么会存在这种方法?Playwright 通常会自动等待事物可见或加载。那么我们为什么需要打电话呢page.waitForSelector("locator")?
我知道我们是否正在等待特定状态,但我看到很多使用此方法的示例代码随机抛出......但我不太明白为什么在正常情况下有必要?
playwright ×10
java ×2
alpine-linux ×1
automation ×1
css ×1
cypress ×1
docker ×1
html-input ×1
node.js ×1
python ×1
required ×1