我目前使用的是:
我正在尝试将移动浏览器堆栈测试与上述框架结合起来。我设置它的方式是在我的 specflow stepdefinitions 中连接到 browserstack 的逻辑
这是功能文件中的逻辑:
Scenario: Mobile test for browserstack
Given I setup my browserstack connection
When I navigate to Rail Informatieportaal Test
这背后的阶级:
using Microsoft.Playwright;
using Newtonsoft.Json;
using NUnit.Framework;
using RPAutomation.Drivers;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using TechTalk.SpecFlow;
namespace RPAutomation.StepDefinitions
{
[Binding}
public class PlaywrightTestSteps
{
private IPlaywright playwright;
private IBrowser browser;
private IPage page;
private readonly string bsUsername = Environment.GetEnvironmentVariable("BROWSERSTACK_USERNAME") ?? "MYCREDENTIALS";
private readonly string bsAccessKey = Environment.GetEnvironmentVariable("BROWSERSTACK_ACCESS_KEY") ?? "MYCREDENTIALS";
private readonly string bsBuildName = "playwright-build-1";
[Given(@"I setup my browserstack connection")]
public async Task GivenISetupMyBrowserstackConnection()
{
playwright = await Playwright.CreateAsync();
var browserstackOptions = new Dictionary<string, object>
{
["osVersion"] = "12.0",
["deviceName"] = "Samsung Galaxy S22", // "Samsung Galaxy S22 Ultra", "Google Pixel 7 Pro", "OnePlus 9", etc.
["browserName"] = "chrome",
["realMobile"] = "true",
["name"] = "My android playwright test",
["build"] = bsBuildName,
["browserstack.playwrightLogs"] = "true",
["browserstack.console"] = "verbose",
["browserstack.username"] = bsUsername,
["browserstack.accessKey"] = bsAccessKey
};
var capsJson = JsonConvert.SerializeObject(browserstackOptions);
var cdpUrl = $"wss://cdp.browserstack.com/playwright?caps={Uri.EscapeDataString(capsJson)}";
browser = await playwright.Chromium.ConnectAsync(cdpUrl);
page = await browser.NewPageAsync();
}
[When(@"I navigate to Rail Informatieportaal Test")]
public async Task WhenINavigateToRailInformatieportaalTest()
{
await page.GotoAsync("https://www.railinformatieportaal-test.nl/");
}
[When(@"I click the login portrait on mobile")]
public async Task WhenIClickTheLoginPortraitOnMobile()
{
await page.Locator("//a[@href='authentication/login']").ClickAsync();
}
以上代码启动设备但不会打开浏览器 结果在 BrowserStack 仪表板中可见:
但是测试在 Visual Studio 测试资源管理器中抛出错误:
Microsoft.Playwright.PlaywrightException:System.Collections.Generic.KeyNotFoundException:字典中不存在给定键“AndroidDevice”。
我需要知道如何在手机测试中实际启动浏览器以及如何修复抛出的错误
使用以下代码在普通机器上测试成功:
Scenario: Regular machine browserstack
Given I Setup My Browserstack Connection
When I navigate to Rail Informatieportaal Test
这背后的代码:
using Microsoft.Playwright;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using TechTalk.SpecFlow;
namespace RPAutomation.StepDefinitions
{
[Binding]
public class PlaywrightTestSteps
{
private IPlaywright playwright;
private IBrowser browser;
private IPage page;
[Given(@"I Setup My Browserstack Connection")]
public async Task GivenISetupMyBrowserStackConnection()
{
playwright = await Playwright.CreateAsync();
Dictionary<string, string> browserstackOptions = new Dictionary<string, string>
{
{"name", "Playwright first sample test"},
{"build", "playwright-dotnet-1"},
{"os", "osx"},
{"os_version", "catalina"},
{"browser", "chrome"}, // allowed browsers are `chrome`, `edge`, `playwright-chromium`, `playwright-firefox` and `playwright-webkit`
{"browserstack.username", "MYCREDENTIALS"},
{"browserstack.accessKey", "MYCREDENTIALS"}
};
string capsJson = JsonConvert.SerializeObject(browserstackOptions);
string cdpUrl = "wss://cdp.browserstack.com/playwright?caps=" + Uri.EscapeDataString(capsJson);
browser = await playwright.Chromium.ConnectAsync(cdpUrl);
page = await browser.NewPageAsync();
}
[When(@"I navigate to Rail Informatieportaal Test")]
public async Task WhenINavigateToRailInformatieportaalTest()
{
await page.GotoAsync("https://www.railinformatieportaal-test.nl/");
}
[AfterScenario]
public async Task AfterScenario()
{
if (playwright != null)
{
await browser.CloseAsync();
playwright.Dispose();
}
}
}
}
我尝试重构以上内容以在移动设备上工作,但这就是错误所在
我希望同样的测试可以在移动设备上运行
实际发生的是创建了一个测试,启动了一个设备,但实际上并没有启动浏览器,并且测试抛出了错误
总结: