Browserstack 上的 Web 应用程序自动化 - 当我们尝试使用硬编码 URL 运行 WebApplication 脚本时 > 它在设备 Iphone 14 最新浏览器上成功运行,没有任何错误,当我们尝试从 configProperties 读取 URL 时也是如此 - 它没有选择基于标签url 或选择功能文件中定义的场景。注意-这不是桌面上的问题
your text
带有硬编码 Url 的驱动程序代码
public static RemoteWebDriver getBrowserStackDriver(Scenario scenario) throws MalformedURLException {
DesiredCapabilities caps = new DesiredCapabilities();
//Map<String,Object> bsCapabilities = new HashMap<>();
Map<String,String> bsCapabilities = new HashMap<>();
caps.setCapability("browserName", "safari");
caps.setCapability("device", "iPhone 14");
caps.setCapability("realMobile", "true");
caps.setCapability("os_version", "16");
bsCapabilities.put("browserstack.idleTimeout", "90");
bsCapabilities.put("browserstack.selenium_version", BasePage.setValue("bs_selenium_version"));
bsCapabilities.put("browserstack.use_w3c", BasePage.setValue("browserstack_use_w3c"));
caps.setCapability("name", scenario.getName());
bsCapabilities.forEach(caps::setCapability);
//bsCapabilities.put("device", BasePage.readConfig("chrome_emulation_device"));
//bsCapabilities.put("device", BasePage.readConfig("environment"));
WebDriver driver = new RemoteWebDriver(new URL(Objects.requireNonNull(setURL())), caps);
WebDriverWait wait = new WebDriverWait(driver, 10);
try {
driver.get("https://www.flexa.nl");
WebElement cookiepopUp=wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@id='onetrust-accept-btn-handler']")));
cookiepopUp.click();
} catch (Exception e) {
logger.fatal("Browserstack driver is not initialized");
Assert.fail("ERROR: Browserstack driver is not initialized: " + e);
}
//quit the driver
//driver.quit();
return new RemoteWebDriver(new URL(Objects.requireNonNull(setURL())), caps);
//return null;
}
BS 的 setURL() 中的代码
private static String setURL() {
String url = "";
if (endpoint.startsWith("saucelabs"))
url = "http://" + BasePage.setValue("sauce_username") + ":" + BasePage.setValue("sauce_accesskey")
+ "@ondemand.eu-central-1.saucelabs.com/wd/hub";
else if (endpoint.startsWith("browserstack"))
url = "https://" + BasePage.setValue("browserstack_username") + ":" + BasePage.setValue(
"browserstack_accesskey") + "@hub-cloud.browserstack.com/wd/hub";
return url;
}
功能文件中的场景
@COATINGS_AUTOMOTIVE @Mobile_Smoke 特征:Atomotive_EN
@Search
Scenario: Verify search bar open-close
Given The user navigates to homepage
Then Homepage should be displayed
When User clicks open search bar
Then Search bar should be visible
When User clicks close search bar
Then Search bar should be invisible
@Search
Scenario: Verify search suggestion container for Market segment
Given The user navigates to homepage
Then Homepage should be displayed
When User clicks open search bar
Then Search bar should be visible
When User fills search input with Metal
Then Suggestion container overlay should be visible for EWT-918
它必须通过从功能文件中选择场景和从 configProperties 中选择 Url 来自动运行脚本
Note-Automation 脚本在桌面浏览器堆栈上运行没有任何问题,但同样不适用于移动设备(它不是从功能文件或 ConfigProperties 中选择 url 或场景)如果我对 URL 进行硬编码则不是问题
还添加了在 windows 10 和移动模拟器上的 chrome 浏览器上运行的代码
public static RemoteWebDriver getBrowserStackDriver(Scenario scenario) {
try {
setBrowserResolution();
//DesiredCapabilities caps = new DesiredCapabilities();
MutableCapabilities caps = new MutableCapabilities();
Map<String, String> bsCapabilities = new HashMap<>();
bsCapabilities.put("os", BasePage.setValue("bs_os"));
bsCapabilities.put("os_version", BasePage.setValue("bs_os_version"));
bsCapabilities.put("resolution", BasePage.setValue("bs_resolution"));
bsCapabilities.put("browser", BasePage.setValue("bs_browser"));
bsCapabilities.put("browser_version", BasePage.setValue("bs_browser_version"));
bsCapabilities.put("browserstack.selenium_version", BasePage.setValue("bs_selenium_version"));
bsCapabilities.put("name", scenario.getName());
bsCapabilities.put("browserstack.use_w3c", BasePage.setValue("browserstack_use_w3c"));
bsCapabilities.put("project", BasePage.setValue("bs_project_name"));
bsCapabilities.put("build", BasePage.setValue("cucumber.filter.tags") + "_" + LocalDate.now());
bsCapabilities.put("browserstack.idleTimeout", "90");
if (browser.equalsIgnoreCase("chrome")){
ChromeOptions withExtension = chromeOptions();
caps.setCapability(ChromeOptions.CAPABILITY, withExtension);
}
if (endpoint.endsWith("mobile")) {
ChromeOptions chromeOptions = new ChromeOptions();
Map<String, Object> mobileEmulation = new HashMap<>();
mobileEmulation.put("deviceName", BasePage.readConfig("chrome_emulation_device"));
chromeOptions.setExperimentalOption("mobileEmulation", mobileEmulation);
caps.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
}
bsCapabilities.forEach(caps::setCapability);
return new RemoteWebDriver(new URL(Objects.requireNonNull(setURL())), caps);
} catch (Exception e) {
logger.fatal("Browserstack driver is not initialized");
Assert.fail("ERROR: Browserstack driver is not initialized: " + e);
}
logger.fatal("Browserstack driver is NULL : ");
return null;
}
和驱动程序-Chrome的ChromeOption代码
private static ChromeOptions chromeOptions() {
WebDriverManager.chromedriver().setup();
ChromeOptions chromeOptions = new ChromeOptions();
if (endpoint.endsWith("mobile")) {
Map<String, Object> mobileEmulation = new HashMap<>();
mobileEmulation.put("deviceName", BasePage.readConfig("chrome_emulation_device"));
chromeOptions.setExperimentalOption("mobileEmulation", mobileEmulation);
}
chromeOptions.setHeadless(Boolean.parseBoolean(BasePage.readConfig("headless")));
chromeOptions.addExtensions(new File("src/test/resources/extension/extension.crx"));
chromeOptions.setHeadless(Boolean.parseBoolean(BasePage.readConfig("headless")));
chromeOptions.addArguments("--remote-allow-origins=*", "ignore-certificate-errors");
return chromeOptions;
}
您能否通过我们的“联系我们”页面向 BrowserStack 提出支持请求?