docs(dotnet): First part/pass for guides (#6583)
This commit is contained in:
parent
2f9b057525
commit
0aa9e06370
|
|
@ -30,6 +30,11 @@ content = page.text_content("nav:first-child")
|
|||
assert content == "home"
|
||||
```
|
||||
|
||||
```csharp
|
||||
var content = await page.TextContentAsync("nav:first-child");
|
||||
Assert.Equals("home", content);
|
||||
```
|
||||
|
||||
### API reference
|
||||
- [`method: Page.textContent`]
|
||||
- [`method: ElementHandle.textContent`]
|
||||
|
|
@ -56,6 +61,11 @@ text = page.inner_text(".selected")
|
|||
assert text == "value"
|
||||
```
|
||||
|
||||
```csharp
|
||||
var content = await page.InnerTextAsync(".selected");
|
||||
Assert.Equals("value", content);
|
||||
```
|
||||
|
||||
### API reference
|
||||
- [`method: Page.innerText`]
|
||||
- [`method: ElementHandle.innerText`]
|
||||
|
|
@ -82,6 +92,11 @@ checked = page.get_attribute("input", "alt")
|
|||
assert alt == "Text"
|
||||
```
|
||||
|
||||
```csharp
|
||||
var value = await page.GetAttributeAsync("input", "alt");
|
||||
Assert.Equals("Text", value);
|
||||
```
|
||||
|
||||
## Checkbox state
|
||||
|
||||
```js
|
||||
|
|
@ -104,6 +119,11 @@ checked = page.is_checked("input")
|
|||
assert checked
|
||||
```
|
||||
|
||||
```csharp
|
||||
var checked = await page.IsCheckedAsync("input");
|
||||
Assert.True(checked);
|
||||
```
|
||||
|
||||
### API reference
|
||||
- [`method: Page.isChecked`]
|
||||
- [`method: ElementHandle.isChecked`]
|
||||
|
|
@ -130,6 +150,11 @@ content = page.eval_on_selector("nav:first-child", "e => e.textContent")
|
|||
assert content == "home"
|
||||
```
|
||||
|
||||
```csharp
|
||||
var content = await page.EvalOnSelectorAsync("nav:first-child", "e => e.textContent");
|
||||
Assert.Equals("home", content);
|
||||
```
|
||||
|
||||
### API reference
|
||||
- [`method: Page.evalOnSelector`]
|
||||
- [`method: JSHandle.evaluate`]
|
||||
|
|
@ -156,6 +181,11 @@ html = page.inner_html("div.result")
|
|||
assert html == "<p>Result</p>"
|
||||
```
|
||||
|
||||
```csharp
|
||||
var html = await page.InnerHTMLAsync("div.result");
|
||||
Assert.Equals(html, "<p>Result</p>");
|
||||
```
|
||||
|
||||
### API reference
|
||||
- [`method: Page.innerHTML`]
|
||||
- [`method: ElementHandle.innerHTML`]
|
||||
|
|
@ -182,6 +212,11 @@ visible = page.is_visible("input")
|
|||
assert visible
|
||||
```
|
||||
|
||||
```csharp
|
||||
var visibility = await page.IsVisibleAsync("input");
|
||||
Assert.True(visibility);
|
||||
```
|
||||
|
||||
### API reference
|
||||
- [`method: Page.isVisible`]
|
||||
- [`method: ElementHandle.isVisible`]
|
||||
|
|
@ -208,6 +243,11 @@ enabled = page.is_enabled("input")
|
|||
assert enabled
|
||||
```
|
||||
|
||||
```csharp
|
||||
var enabled = await page.IsEnabledAsync("input");
|
||||
Assert.True(enabled);
|
||||
```
|
||||
|
||||
### API reference
|
||||
- [`method: Page.isEnabled`]
|
||||
- [`method: ElementHandle.isEnabled`]
|
||||
|
|
@ -294,6 +334,25 @@ length = page.eval_on_selector_all('li.selected', '(items) => items.length')
|
|||
assert length == 3
|
||||
```
|
||||
|
||||
```csharp
|
||||
// Assert local storage value
|
||||
var userId = await page.EvaluateAsync<string>("() => window.localStorage.getItem('userId')");
|
||||
Assert.NotNull(userId);
|
||||
|
||||
// Assert value for input element
|
||||
await page.WaitForSelectorAsync("#search");
|
||||
var value = await page.EvalOnSelectorAsync("#search", "el => el.value");
|
||||
Assert.Equals("query", value);
|
||||
|
||||
// Assert computed style
|
||||
var fontSize = await page.EvalOnSelectorAsync<string>("div", "el => window.getComputedStyle(el).fontSize");
|
||||
Assert.Equals("16px", fontSize);
|
||||
|
||||
// Assert list length
|
||||
var length = await page.EvalOnSelectorAllAsync<int>("li.selected", "items => items.length");
|
||||
Assert.Equals(3, length);
|
||||
```
|
||||
|
||||
### API reference
|
||||
- [`method: Page.evaluate`]
|
||||
- [`method: Page.evalOnSelector`]
|
||||
|
|
|
|||
|
|
@ -224,6 +224,23 @@ context.add_init_script(storage => {
|
|||
}, session_storage)
|
||||
```
|
||||
|
||||
```csharp
|
||||
// Get session storage and store as env variable
|
||||
var sessionStorage = await page.EvaluateAsync<string>("() => JSON.stringify(sessionStorage");
|
||||
Environment.SetEnvironmentVariable("SESSION_STORAGE", sessionStorage);
|
||||
|
||||
// Set session storage in a new context
|
||||
var loadedSessionStorage = Environment.GetEnvironmentVariable("SESSION_STORAGE");
|
||||
await context.AddInitScriptAsync(@"(storage => {
|
||||
if (window.location.hostname === 'example.com') {
|
||||
const entries = JSON.parse(storage);
|
||||
Object.keys(entries).forEach(key => {
|
||||
window.sessionStorage.setItem(key, entries[key]);
|
||||
});
|
||||
}
|
||||
})(" + loadedSessionStorage + ")");
|
||||
```
|
||||
|
||||
### API reference
|
||||
- [`method: BrowserContext.storageState`]
|
||||
- [`method: Browser.newContext`]
|
||||
|
|
@ -290,6 +307,20 @@ with sync_playwright() as p:
|
|||
# Execute login steps manually in the browser window
|
||||
```
|
||||
|
||||
```csharp
|
||||
using Microsoft.Playwright;
|
||||
|
||||
class Guides
|
||||
{
|
||||
public async void Main()
|
||||
{
|
||||
using var playwright = await Playwright.CreateAsync();
|
||||
var chromium = playwright.Chromium;
|
||||
var context = chromium.LaunchPersistentContextAsync(@"C:\path\to\directory\", headless: false);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Lifecycle
|
||||
|
||||
1. Create a user data directory on disk
|
||||
|
|
@ -298,4 +329,4 @@ with sync_playwright() as p:
|
|||
|
||||
### API reference
|
||||
- [BrowserContext]
|
||||
- [`method: BrowserType.launchPersistentContext`]
|
||||
- [`method: BrowserType.launchPersistentContext`]
|
||||
|
|
|
|||
|
|
@ -100,6 +100,10 @@ Suggested configuration
|
|||
})
|
||||
```
|
||||
|
||||
```csharp
|
||||
await playwright.Chromium.LaunchAsync(args: new[] { "--disable-dev-shm-usage" });
|
||||
```
|
||||
|
||||
This will write shared memory files into `/tmp` instead of `/dev/shm`. See
|
||||
[crbug.com/736452](https://bugs.chromium.org/p/chromium/issues/detail?id=736452) for more details.
|
||||
1. Using `--ipc=host` is also recommended when using Chromium—without it Chromium can run out of memory
|
||||
|
|
@ -259,6 +263,20 @@ browser = await playwright.chromium.launch(chromiumSandbox=False)
|
|||
browser = playwright.chromium.launch(chromiumSandbox=False)
|
||||
```
|
||||
|
||||
```csharp
|
||||
using Microsoft.Playwright;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
class Guides
|
||||
{
|
||||
public async void Main()
|
||||
{
|
||||
using var playwright = await Playwright.CreateAsync();
|
||||
await playwright.Chromium.LaunchAsync(chromiumSandbox: false);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### GitLab CI
|
||||
|
||||
To run Playwright tests on GitLab, use our public Docker image ([see Dockerfile](./docker.md)).
|
||||
|
|
@ -371,6 +389,20 @@ with sync_playwright() as p:
|
|||
browser = p.chromium.launch(headless=False)
|
||||
```
|
||||
|
||||
```csharp
|
||||
using Microsoft.Playwright;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
class Guides
|
||||
{
|
||||
public async void Main()
|
||||
{
|
||||
using var playwright = await Playwright.CreateAsync();
|
||||
await playwright.Chromium.LaunchAsync(headless: false);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
On Linux agents, headed execution requires [Xvfb](https://en.wikipedia.org/wiki/Xvfb) to be installed. Our [Docker image](./docker.md) and GitHub Action have Xvfb pre-installed. To run browsers in headed mode with Xvfb, add `xvfb-run` before the Node.js command.
|
||||
|
||||
```sh js
|
||||
|
|
|
|||
Loading…
Reference in a new issue