我正在与剧作家一起运行多个 chromium 实例。
在每个实例上,我都使用相同的凭据登录。
当我已经使用相同的凭据登录到第一个浏览器实例时,有没有办法自动登录到其他浏览器实例?
我正在测试的软件有很多弹出窗口/模式窗口。主页loginPage以全屏模式打开。单击按钮后,将打开一个新的弹出(模式)窗口,例如。overviewPage
我想要实现的是更改此弹出窗口的视口,或者更好地最大化它,在本例中是overviewPage
这是我的代码:
const browser = await chromium.launch({
args: ['--start-maximized'],
headless : false, slowMo : 50});
const context = await browser.newContext({viewport : null});
const loginPage = await context.newPage();
await loginPage.goto(myURL.href); //Login Page was opened in Maximized mode (Fullscreen)
// Next step is to click a button on Login Page, and a new page is opened.
await loginPage.click('#nextBtn');
console.log('Get page after a specific action (e.g. clicking a button');
const [overviewPage] = await Promise.all([
context.waitForEvent('page')
]);
await overviewPage.waitForLoadState(); …Run Code Online (Sandbox Code Playgroud) 在 playwright-python 中我知道我可以得到一个elementHandleusing querySelector().
示例(同步):
from playwright import sync_playwright
with sync_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
browser = browser_type.launch()
page = browser.newPage()
page.goto('https://duckduckgo.com/')
element = page.querySelector('input[id=\"search_form_input_homepage\"]')
Run Code Online (Sandbox Code Playgroud)
如何根据 this 获取相对于此的元素elementHandle?即父母、祖父母、兄弟姐妹、孩子的句柄?
什么是正确的查询选择器来获取所有标签并迭代以捕获表数据?下面的查询选择器无法在 DOM 中找到元素。先感谢您
const allusers = await page.$$eval('tbody .MuiTableRow-root', (users) => {
return users.map(user => {
const email = user.querySelector('tr:nth-child(1)');
const edition = user.querySelector('tr:nth-child(2)');
return {
email: email.innerText.trim(),
edition: edition.innerText.trim()
};
});
});
console.log('${allusers.length} users found');
console.dir(allusers);
Run Code Online (Sandbox Code Playgroud)
我有 PHP 脚本,我使用带有 URL 参数的代码调用 python 函数:
import json
import sys
import urllib.parse
link = urllib.parse.unquote(sys.argv[1])
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
context = browser.new_context(user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36')
page = context.new_page()
cookie_file = open('./cookies.json')
cookies = json.load(cookie_file)
print(cookies)
context.add_cookies(cookies)
page.goto(link)
try:
page.wait_for_timeout(10000)
print(page.innerHTML("*"))
page.close()
context.close()
browser.close()
except Exception as e:
print("Error in playwright script.")
page.close()
context.close()
browser.close()
Run Code Online (Sandbox Code Playgroud)
但是,当我访问页面后想打印页面源时,我收到
Error in playwright script.
Run Code Online (Sandbox Code Playgroud)
因为我尝试过的代码不起作用:
print(page.innerHTML("*"))
Run Code Online (Sandbox Code Playgroud)
有什么帮助吗?
python webautomation python-3.x playwright playwright-python
我想在命令行中创建自定义参数,以便当 process.argv 与自定义参数匹配时,我的相同规范会执行略有不同的操作。但我在文档中看不到该选项。我错过了还是剧作家不允许这样做?
目前我使用下面的代码打开一个新的浏览器会话,但它总是以隐身方式启动,我可以启动一个新的 chromium 会话但不以隐身方式启动吗?:
from behave import *
from playwright.sync_api import sync_playwright
import time
class session_driver:
driver = None
def open_browser(self, url):
playW_sync_instace = sync_playwright().start()
global browser
browser = playW_sync_instace.chromium.launch(headless=False)
browser.new_context(record_video_dir="videos/",
record_video_size={"width": 640, "height": 480})
self.driver = browser.new_page()
self.driver.goto(url)
Run Code Online (Sandbox Code Playgroud) 给出以下标记:
<label for="name">Name</label>
<input type="text" id="name" />
Run Code Online (Sandbox Code Playgroud)
我想在剧作家测试中填写输入值。但是,我更喜欢遵循类似于测试库的范例,它像真实用户一样使用选择器(通常是可见的文本内容)。因此,我希望我的剧作家选择器使用标签文本。
当我尝试以下操作时,我收到错误element is not an <input>,因为它选择了实际的标签元素:
await page.fill('"Name"')
还有其他方法可以实现这一目标吗?
注意:我不热衷于使用 Playwright 测试库包,因为它还不够成熟。另外,我的理解是 Puppeteer 和 Playwright 实际上是相同的,因此为什么这个问题适用于这两个框架。
// foo.ts
import { test as base } from "@playwright/test";
const test = base.extend<{foo: string}>({
foo: "hello"
});
export { test };
Run Code Online (Sandbox Code Playgroud)
// bar.ts
import { test as base } from "@playwright/test";
const test = base.extend<{bar: string}>({
bar: "bye"
});
export { test };
Run Code Online (Sandbox Code Playgroud)
// index.ts
import { test } from /* BOTH_FOO_AND_BAR??? */;
test("Basic test", async ({ foo, bar }) => { // <-- I want to be able to use both foo and bar fixture here
console.log(foo);
console.log(bar); …Run Code Online (Sandbox Code Playgroud) 我正在尝试在浏览器中记录网络调用。对于我的用例,我要求浏览器处于打开状态,并且只能使用脚本关闭。我目前正在使用 page.pause() 函数来防止浏览器自动关闭。有没有其他方法可以防止浏览器自动关闭。
test('Verify home page Load event',async({page})=>{
//const browser = await chromium.launchPersistentContext("",{headless:false});
await page.goto("https://samplesite.com")
await page.on('request',req=>{
const requestUrl = req.url();
if(requestUrl.indexOf("google-analytics.com/collect")>-1){
console.log("Intercepted:->"+requestUrl);
}else{
req.continue
}
})
await page.pause();
Run Code Online (Sandbox Code Playgroud)
})
我尝试检查Python的[链接](How to keep browser opening by the end of the code running with playwright-python?),但无法将其应用于JS。
playwright ×10
javascript ×3
node.js ×3
puppeteer ×2
python ×2
python-3.x ×2
typescript ×2
automation ×1
dom ×1
handle ×1
popupwindow ×1
testing ×1