|
|
|
|
|
|
|
|
|
namespace PlaywrightStudy.Test
|
|
|
|
|
{
|
|
|
|
|
public class PlaywrightTest
|
|
|
|
|
{
|
|
|
|
|
#region Edge
|
|
|
|
|
[Fact]
|
|
|
|
|
public async void Baidu_Edge_Test()
|
|
|
|
|
{
|
|
|
|
|
using var playwright = await Playwright.CreateAsync();
|
|
|
|
|
|
|
|
|
|
//await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions()
|
|
|
|
|
//{
|
|
|
|
|
// SlowMo = 50, //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
// Headless = false, // <20>ر<EFBFBD><D8B1><EFBFBD>ͷģʽ(<28>н<EFBFBD><D0BD><EFBFBD>)
|
|
|
|
|
// Channel = "msedge", // ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>chrome<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>()
|
|
|
|
|
// Devtools = false, // <20><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD>
|
|
|
|
|
// ChromiumSandbox = false, // <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɳ<EFBFBD><C9B3>
|
|
|
|
|
// ExecutablePath = string.Empty, // <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>ļ<EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD>Զ<EFBFBD>Ѱ<EFBFBD><D1B0> ms-playwright <20><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// Args = new[] { "--enable-automation=true", "--disable-blink-features=AutomationControlled" }, // <20><>ֹselenium<75><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
//});
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>Edge<67><65><EFBFBD><EFBFBD>
|
|
|
|
|
await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions()
|
|
|
|
|
{
|
|
|
|
|
//<2F>ر<EFBFBD><D8B1><EFBFBD>ͷģʽ(<28>н<EFBFBD><D0BD><EFBFBD>)
|
|
|
|
|
Headless = false,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
var browserContexts = browser.Contexts;
|
|
|
|
|
|
|
|
|
|
//ҳ<><D2B3>
|
|
|
|
|
var page = await browser.NewPageAsync();
|
|
|
|
|
|
|
|
|
|
//ҳ<><D2B3><EFBFBD><EFBFBD>Ӧ
|
|
|
|
|
var response = await page.GotoAsync("https://www.baidu.com/");
|
|
|
|
|
|
|
|
|
|
//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
var searchBoxLocator = page.GetByRole(AriaRole.Textbox).Nth(0);
|
|
|
|
|
|
|
|
|
|
//Ԫ<>ظ<EFBFBD><D8B8><EFBFBD>
|
|
|
|
|
var count = await searchBoxLocator.CountAsync();
|
|
|
|
|
|
|
|
|
|
//xUnit<69><74><EFBFBD><EFBFBD>
|
|
|
|
|
Assert.True(count > 0);
|
|
|
|
|
|
|
|
|
|
//Playwright<68><74><EFBFBD><EFBFBD>
|
|
|
|
|
await Microsoft.Playwright.Assertions.Expect(searchBoxLocator).ToHaveCountAsync(1);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>(һ<><D2BB><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|
|
|
|
await searchBoxLocator.FillAsync("Playwright");
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<DDBA>(ģ<><C4A3><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>룺ÿ<EBA3BA><C3BF><EFBFBD>ַ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
//await textboxLocator.TypeAsync(".net", new LocatorTypeOptions { Delay = 1000 });
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<DDBA>(ģ<><C4A3><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>룺ÿ<EBA3BA><C3BF><EFBFBD>ַ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ)
|
|
|
|
|
await searchBoxLocator.PressSequentiallyAsync(".NET", new LocatorPressSequentiallyOptions { Delay = 200 });
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD>:ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>,Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>("Shift+Home"<22><>"Alt+Enter")]
|
|
|
|
|
//await searchBoxLocator.PressAsync("Enter");
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť
|
|
|
|
|
var searchButtonLocator = page.Locator("#su");
|
|
|
|
|
|
|
|
|
|
var searchButtonCount = await searchButtonLocator.CountAsync();
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>:<3A><>ť<EFBFBD>ҵ<EFBFBD>
|
|
|
|
|
await Microsoft.Playwright.Assertions.Expect(searchButtonLocator).ToHaveCountAsync(1);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť
|
|
|
|
|
await searchButtonLocator.ClickAsync();
|
|
|
|
|
|
|
|
|
|
//ʹ<><CAB9> page.Keyboard <20><> page.Mouse <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD><CCBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
|
|
|
|
//await page.Keyboard.PressAsync("Enter");
|
|
|
|
|
//await page.Mouse.ClickAsync(100, 100);
|
|
|
|
|
|
|
|
|
|
await page.WaitForLoadStateAsync();
|
|
|
|
|
|
|
|
|
|
//<2F><>ͼ
|
|
|
|
|
await page.ScreenshotAsync(new()
|
|
|
|
|
{
|
|
|
|
|
Path = "Baidu.Edge.Screenshot.png"
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//<2F><>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>ΪPdf<64>ļ<EFBFBD>
|
|
|
|
|
await page.PdfAsync(new()
|
|
|
|
|
{
|
|
|
|
|
Path = "Baidu.Edge.pdf",
|
|
|
|
|
DisplayHeaderFooter = false,
|
|
|
|
|
Format = "A4"
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public async void Bing_Edge_Test()
|
|
|
|
|
{
|
|
|
|
|
using var playwright = await Playwright.CreateAsync();
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>Edge<67><65><EFBFBD><EFBFBD>
|
|
|
|
|
await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions()
|
|
|
|
|
{
|
|
|
|
|
//<2F>ر<EFBFBD><D8B1><EFBFBD>ͷģʽ(<28>н<EFBFBD><D0BD><EFBFBD>)
|
|
|
|
|
Headless = false,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
var browserContexts = browser.Contexts;
|
|
|
|
|
|
|
|
|
|
//ҳ<><D2B3>
|
|
|
|
|
var page = await browser.NewPageAsync();
|
|
|
|
|
|
|
|
|
|
//ҳ<><D2B3><EFBFBD><EFBFBD>Ӧ
|
|
|
|
|
var response = await page.GotoAsync("https://cn.bing.com/");
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
Assert.Equal(200, response?.Status);
|
|
|
|
|
|
|
|
|
|
//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
var searchBoxLocator = page.Locator("input#sb_form_q");
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
var count = await searchBoxLocator.CountAsync();
|
|
|
|
|
|
|
|
|
|
//xUnit<69><74><EFBFBD><EFBFBD>
|
|
|
|
|
Assert.True(count > 0);
|
|
|
|
|
|
|
|
|
|
//Playwright<68><74><EFBFBD><EFBFBD>
|
|
|
|
|
await Microsoft.Playwright.Assertions.Expect(searchBoxLocator).ToHaveCountAsync(1);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>(һ<><D2BB><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|
|
|
|
//await searchBoxLocator.FillAsync("Playwright");
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<DDBA>(ģ<><C4A3><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>룺ÿ<EBA3BA><C3BF><EFBFBD>ַ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ)
|
|
|
|
|
await searchBoxLocator.PressSequentiallyAsync("Playwright.NET", new LocatorPressSequentiallyOptions { Delay = 200 });
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD>:ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>,Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>("Shift+Home"<22><>"Alt+Enter")]
|
|
|
|
|
await searchBoxLocator.PressAsync("Enter");
|
|
|
|
|
|
|
|
|
|
await page.WaitForLoadStateAsync();
|
|
|
|
|
|
|
|
|
|
//<2F><>ͼ
|
|
|
|
|
await page.ScreenshotAsync(new()
|
|
|
|
|
{
|
|
|
|
|
Path = "Bing.Edge.Screenshot.png"
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//<2F><>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>ΪPdf<64>ļ<EFBFBD>
|
|
|
|
|
await page.PdfAsync(new()
|
|
|
|
|
{
|
|
|
|
|
Path = "Bing.Edge.pdf",
|
|
|
|
|
DisplayHeaderFooter = false,
|
|
|
|
|
Format = "A4"
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Chrome
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20>Ƚ<EFBFBD><C8BD><EFBFBD>ϸ
|
|
|
|
|
/// </summary>
|
|
|
|
|
[Fact]
|
|
|
|
|
public async void Baidu_Chrome_Test()
|
|
|
|
|
{
|
|
|
|
|
using var playwright = await Playwright.CreateAsync();
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> chrome
|
|
|
|
|
await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions()
|
|
|
|
|
{
|
|
|
|
|
SlowMo = 50, //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
Headless = false, // <20>ر<EFBFBD><D8B1><EFBFBD>ͷģʽ(<28>н<EFBFBD><D0BD><EFBFBD>)
|
|
|
|
|
Channel = "chrome", // ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>chrome<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>()
|
|
|
|
|
Devtools = false, // <20><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD>
|
|
|
|
|
ChromiumSandbox = true, // <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɳ<EFBFBD><C9B3>
|
|
|
|
|
ExecutablePath = string.Empty, // <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>ļ<EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD>Զ<EFBFBD>Ѱ<EFBFBD><D1B0> ms-playwright <20><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
DownloadsPath = "download",
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//ҳ<><D2B3>
|
|
|
|
|
var page = await browser.NewPageAsync();
|
|
|
|
|
|
|
|
|
|
//ҳ<><D2B3><EFBFBD><EFBFBD>Ӧ
|
|
|
|
|
var response = await page.GotoAsync("https://www.baidu.com/");
|
|
|
|
|
|
|
|
|
|
//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
var searchBoxLocator = page.GetByRole(AriaRole.Textbox).Nth(0);
|
|
|
|
|
|
|
|
|
|
//Ԫ<>ظ<EFBFBD><D8B8><EFBFBD>
|
|
|
|
|
var count = await searchBoxLocator.CountAsync();
|
|
|
|
|
|
|
|
|
|
//xUnit<69><74><EFBFBD><EFBFBD>
|
|
|
|
|
Assert.True(count > 0);
|
|
|
|
|
|
|
|
|
|
//Playwright<68><74><EFBFBD><EFBFBD>
|
|
|
|
|
await Microsoft.Playwright.Assertions.Expect(searchBoxLocator).ToHaveCountAsync(1);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>(һ<><D2BB><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|
|
|
|
//await searchBoxLocator.FillAsync("Playwright");
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<DDBA>(ģ<><C4A3><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>룺ÿ<EBA3BA><C3BF><EFBFBD>ַ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ)
|
|
|
|
|
await searchBoxLocator.PressSequentiallyAsync("Playwright.NET", new LocatorPressSequentiallyOptions { Delay = 200 });
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD>:ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>,Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>("Shift+Home"<22><>"Alt+Enter")]
|
|
|
|
|
await searchBoxLocator.PressAsync("Enter");
|
|
|
|
|
|
|
|
|
|
//<2F>ȴ<EFBFBD>
|
|
|
|
|
await page.WaitForLoadStateAsync(LoadState.DOMContentLoaded);
|
|
|
|
|
|
|
|
|
|
//<2F><>ͼ
|
|
|
|
|
await page.ScreenshotAsync(new()
|
|
|
|
|
{
|
|
|
|
|
Path = "Baidu.Chrome.Screenshot.png"
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//<2F><>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>ΪPdf<64>ļ<EFBFBD>
|
|
|
|
|
await page.PdfAsync(new()
|
|
|
|
|
{
|
|
|
|
|
Path = "Baidu.Chrome.pdf",
|
|
|
|
|
DisplayHeaderFooter = false,
|
|
|
|
|
Format = "A4"
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Firefox
|
|
|
|
|
[Fact]
|
|
|
|
|
public async void Baidu_Firefox_Test()
|
|
|
|
|
{
|
|
|
|
|
using var playwright = await Playwright.CreateAsync();
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> chrome
|
|
|
|
|
await using var browser = await playwright.Firefox.LaunchAsync(new BrowserTypeLaunchOptions()
|
|
|
|
|
{
|
|
|
|
|
SlowMo = 50, //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
Headless = false, // <20>ر<EFBFBD><D8B1><EFBFBD>ͷģʽ(<28>н<EFBFBD><D0BD><EFBFBD>
|
|
|
|
|
Devtools = false, // <20><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD>
|
|
|
|
|
ChromiumSandbox = true, // <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɳ<EFBFBD><C9B3>
|
|
|
|
|
ExecutablePath = string.Empty, // <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>ļ<EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD>Զ<EFBFBD>Ѱ<EFBFBD><D1B0> ms-playwright <20><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
DownloadsPath = "download",
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//ҳ<><D2B3>
|
|
|
|
|
var page = await browser.NewPageAsync();
|
|
|
|
|
|
|
|
|
|
//ҳ<><D2B3><EFBFBD><EFBFBD>Ӧ
|
|
|
|
|
var response = await page.GotoAsync("https://www.baidu.com/");
|
|
|
|
|
|
|
|
|
|
//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
var searchBoxLocator = page.GetByRole(AriaRole.Textbox).Nth(0);
|
|
|
|
|
|
|
|
|
|
//Ԫ<>ظ<EFBFBD><D8B8><EFBFBD>
|
|
|
|
|
var count = await searchBoxLocator.CountAsync();
|
|
|
|
|
|
|
|
|
|
//xUnit<69><74><EFBFBD><EFBFBD>
|
|
|
|
|
Assert.True(count > 0);
|
|
|
|
|
|
|
|
|
|
//Playwright<68><74><EFBFBD><EFBFBD>
|
|
|
|
|
await Microsoft.Playwright.Assertions.Expect(searchBoxLocator).ToHaveCountAsync(1);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>(һ<><D2BB><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|
|
|
|
//await searchBoxLocator.FillAsync("Playwright");
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<DDBA>(ģ<><C4A3><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>룺ÿ<EBA3BA><C3BF><EFBFBD>ַ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ)
|
|
|
|
|
await searchBoxLocator.PressSequentiallyAsync("Playwright.NET", new LocatorPressSequentiallyOptions { Delay = 200 });
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD>:ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>,Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>("Shift+Home"<22><>"Alt+Enter")]
|
|
|
|
|
await searchBoxLocator.PressAsync("Enter");
|
|
|
|
|
|
|
|
|
|
//<2F>ȴ<EFBFBD>
|
|
|
|
|
await page.WaitForLoadStateAsync(LoadState.DOMContentLoaded);
|
|
|
|
|
|
|
|
|
|
//<2F><>ͼ
|
|
|
|
|
await page.ScreenshotAsync(new()
|
|
|
|
|
{
|
|
|
|
|
Path = "Baidu.Firefox.Screenshot.png"
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//<2F><>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>ΪPdf<64>ļ<EFBFBD>:FireFox<6F><78>֧<EFBFBD><D6A7>
|
|
|
|
|
//await page.PdfAsync(new()
|
|
|
|
|
//{
|
|
|
|
|
// Path = "Baidu.Firefox.pdf",
|
|
|
|
|
// DisplayHeaderFooter = false,
|
|
|
|
|
// Format = "A4"
|
|
|
|
|
//});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public async void Bing_Firefox_Test()
|
|
|
|
|
{
|
|
|
|
|
using var playwright = await Playwright.CreateAsync();
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> chrome
|
|
|
|
|
await using var browser = await playwright.Firefox.LaunchAsync(new BrowserTypeLaunchOptions()
|
|
|
|
|
{
|
|
|
|
|
SlowMo = 50, //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
Headless = false, // <20>ر<EFBFBD><D8B1><EFBFBD>ͷģʽ(<28>н<EFBFBD><D0BD><EFBFBD>
|
|
|
|
|
Devtools = false, // <20><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD>
|
|
|
|
|
ChromiumSandbox = true, // <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɳ<EFBFBD><C9B3>
|
|
|
|
|
ExecutablePath = string.Empty, // <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>ļ<EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD>Զ<EFBFBD>Ѱ<EFBFBD><D1B0> ms-playwright <20><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
DownloadsPath = "download",
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
var browserContexts = browser.Contexts;
|
|
|
|
|
|
|
|
|
|
//ҳ<><D2B3>
|
|
|
|
|
var page = await browser.NewPageAsync();
|
|
|
|
|
|
|
|
|
|
//ҳ<><D2B3><EFBFBD><EFBFBD>Ӧ
|
|
|
|
|
var response = await page.GotoAsync("https://cn.bing.com/");
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
Assert.Equal(200, response?.Status);
|
|
|
|
|
|
|
|
|
|
//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
var searchBoxLocator = page.Locator("input#sb_form_q");
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
var count = await searchBoxLocator.CountAsync();
|
|
|
|
|
|
|
|
|
|
//xUnit<69><74><EFBFBD><EFBFBD>
|
|
|
|
|
Assert.True(count > 0);
|
|
|
|
|
|
|
|
|
|
//Playwright<68><74><EFBFBD><EFBFBD>
|
|
|
|
|
await Microsoft.Playwright.Assertions.Expect(searchBoxLocator).ToHaveCountAsync(1);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>(һ<><D2BB><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|
|
|
|
//await searchBoxLocator.FillAsync("Playwright");
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<DDBA>(ģ<><C4A3><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>룺ÿ<EBA3BA><C3BF><EFBFBD>ַ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ)
|
|
|
|
|
await searchBoxLocator.PressSequentiallyAsync("Playwright.NET", new LocatorPressSequentiallyOptions { Delay = 200 });
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD>:ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>,Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>("Shift+Home"<22><>"Alt+Enter")]
|
|
|
|
|
await searchBoxLocator.PressAsync("Enter");
|
|
|
|
|
|
|
|
|
|
await page.WaitForLoadStateAsync();
|
|
|
|
|
|
|
|
|
|
//<2F><>ͼ
|
|
|
|
|
await page.ScreenshotAsync(new()
|
|
|
|
|
{
|
|
|
|
|
Path = "Bing.Firefox.Screenshot.png"
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//<2F><>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>ΪPdf<64>ļ<EFBFBD>
|
|
|
|
|
//await page.PdfAsync(new()
|
|
|
|
|
//{
|
|
|
|
|
// Path = "Bing.Firefox.pdf",
|
|
|
|
|
// DisplayHeaderFooter = false,
|
|
|
|
|
// Format = "A4"
|
|
|
|
|
//});
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region WebKit
|
|
|
|
|
[Fact]
|
|
|
|
|
public async void Baidu_WebKit_Test()
|
|
|
|
|
{
|
|
|
|
|
using var playwright = await Playwright.CreateAsync();
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> chrome
|
|
|
|
|
await using var browser = await playwright.Webkit.LaunchAsync(new BrowserTypeLaunchOptions()
|
|
|
|
|
{
|
|
|
|
|
SlowMo = 50, //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
Headless = false, // <20>ر<EFBFBD><D8B1><EFBFBD>ͷģʽ(<28>н<EFBFBD><D0BD><EFBFBD>
|
|
|
|
|
Devtools = false, // <20><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD>
|
|
|
|
|
ChromiumSandbox = true, // <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɳ<EFBFBD><C9B3>
|
|
|
|
|
ExecutablePath = string.Empty, // <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>ļ<EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD>Զ<EFBFBD>Ѱ<EFBFBD><D1B0> ms-playwright <20><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
DownloadsPath = "download",
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//ҳ<><D2B3>
|
|
|
|
|
var page = await browser.NewPageAsync();
|
|
|
|
|
|
|
|
|
|
//ҳ<><D2B3><EFBFBD><EFBFBD>Ӧ
|
|
|
|
|
var response = await page.GotoAsync("https://www.baidu.com/");
|
|
|
|
|
|
|
|
|
|
//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
var searchBoxLocator = page.GetByRole(AriaRole.Textbox).Nth(0);
|
|
|
|
|
|
|
|
|
|
//Ԫ<>ظ<EFBFBD><D8B8><EFBFBD>
|
|
|
|
|
var count = await searchBoxLocator.CountAsync();
|
|
|
|
|
|
|
|
|
|
//xUnit<69><74><EFBFBD><EFBFBD>
|
|
|
|
|
Assert.True(count > 0);
|
|
|
|
|
|
|
|
|
|
//Playwright<68><74><EFBFBD><EFBFBD>
|
|
|
|
|
await Microsoft.Playwright.Assertions.Expect(searchBoxLocator).ToHaveCountAsync(1);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>(һ<><D2BB><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|
|
|
|
//await searchBoxLocator.FillAsync("Playwright");
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<DDBA>(ģ<><C4A3><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>룺ÿ<EBA3BA><C3BF><EFBFBD>ַ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ)
|
|
|
|
|
await searchBoxLocator.PressSequentiallyAsync("Playwright.NET", new LocatorPressSequentiallyOptions { Delay = 200 });
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD>:ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>,Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>("Shift+Home"<22><>"Alt+Enter")]
|
|
|
|
|
await searchBoxLocator.PressAsync("Enter");
|
|
|
|
|
|
|
|
|
|
//<2F>ȴ<EFBFBD>
|
|
|
|
|
await page.WaitForLoadStateAsync(LoadState.DOMContentLoaded);
|
|
|
|
|
|
|
|
|
|
//<2F><>ͼ
|
|
|
|
|
await page.ScreenshotAsync(new()
|
|
|
|
|
{
|
|
|
|
|
Path = "Baidu.WebKit.Screenshot.png"
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//<2F><>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>ΪPdf<64>ļ<EFBFBD>:FireFox<6F><78>֧<EFBFBD><D6A7>
|
|
|
|
|
//await page.PdfAsync(new()
|
|
|
|
|
//{
|
|
|
|
|
// Path = "Baidu.WebKit.pdf",
|
|
|
|
|
// DisplayHeaderFooter = false,
|
|
|
|
|
// Format = "A4"
|
|
|
|
|
//});
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region WebAPI
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ѽӿ<D1BD>
|
|
|
|
|
/// </summary>
|
|
|
|
|
[Fact]
|
|
|
|
|
public async Task WebAPI_TestAsync()
|
|
|
|
|
{
|
|
|
|
|
//https://docs.tenapi.cn/ <20><><EFBFBD>ѽӿ<D1BD>
|
|
|
|
|
//IP<49><50>ѯ https://tenapi.cn/v2/getip?ip=192.168.1.1
|
|
|
|
|
|
|
|
|
|
using var playwright = await Playwright.CreateAsync();
|
|
|
|
|
var apiRequestContext = await playwright.APIRequest.NewContextAsync(new APIRequestNewContextOptions()
|
|
|
|
|
{
|
|
|
|
|
BaseURL="https://tenapi.cn",
|
|
|
|
|
ExtraHTTPHeaders = new Dictionary<string, string>()
|
|
|
|
|
{
|
|
|
|
|
{ "Accept","text/html"},
|
|
|
|
|
|
|
|
|
|
//ȫ<><C8AB><EFBFBD><EFBFBD>֤
|
|
|
|
|
{ "Authorization","Bear a.b.c"}
|
|
|
|
|
},
|
|
|
|
|
//HttpCredentials = new HttpCredentials() { Origin="http://localhost:8060",Username="admin",Password="123456" },
|
|
|
|
|
//IgnoreHTTPSErrors = true, //<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
Timeout = 30*1000,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var apiResponse = await apiRequestContext.GetAsync("v2/getip?ip=192.168.1.1");
|
|
|
|
|
|
|
|
|
|
Assert.True(apiResponse.Ok);
|
|
|
|
|
|
|
|
|
|
var ipResult = await apiResponse.JsonAsync<TenApiReturnBase<GetIP>>();
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(ipResult);
|
|
|
|
|
Assert.IsType<TenApiReturnBase<GetIP>>(ipResult);
|
|
|
|
|
|
|
|
|
|
Assert.Equal("<22><>ȡ<EFBFBD>ɹ<EFBFBD>", ipResult.msg);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// ʹ<><CAB9>Fiddlerץ<72><D7A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FiddlerΪ<72><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Fiddler
|
|
|
|
|
/// </summary>
|
|
|
|
|
[Fact]
|
|
|
|
|
public async Task WebAPI_FiddleProxy_TestAsync()
|
|
|
|
|
{
|
|
|
|
|
//https://docs.tenapi.cn/ <20><><EFBFBD>ѽӿ<D1BD>
|
|
|
|
|
//IP<49><50>ѯ https://tenapi.cn/v2/getip?ip=192.168.1.1
|
|
|
|
|
|
|
|
|
|
using var playwright = await Playwright.CreateAsync();
|
|
|
|
|
var apiRequestContext = await playwright.APIRequest.NewContextAsync(new APIRequestNewContextOptions()
|
|
|
|
|
{
|
|
|
|
|
BaseURL = "https://tenapi.cn",
|
|
|
|
|
ExtraHTTPHeaders = new Dictionary<string, string>()
|
|
|
|
|
{
|
|
|
|
|
{ "Accept","text/html"},
|
|
|
|
|
{ "Authorization","Bear a.b.c"}
|
|
|
|
|
},
|
|
|
|
|
IgnoreHTTPSErrors = true, //<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
Timeout = 30 * 1000,
|
|
|
|
|
Proxy = new Proxy() { Server = "http://127.0.0.1:8888" }
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var apiResponse = await apiRequestContext.GetAsync("v2/getip?ip=192.168.1.1");
|
|
|
|
|
|
|
|
|
|
Assert.True(apiResponse.Ok);
|
|
|
|
|
|
|
|
|
|
var ipResult = await apiResponse.JsonAsync<TenApiReturnBase<GetIP>>();
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(ipResult);
|
|
|
|
|
Assert.IsType<TenApiReturnBase<GetIP>>(ipResult);
|
|
|
|
|
|
|
|
|
|
Assert.Equal("<22><>ȡ<EFBFBD>ɹ<EFBFBD>", ipResult.msg);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
}
|