硒测试中所需的功能和示例

所需功能是用于声明一组基本要求(例如浏览器,操作系统,浏览器版本等的组合)的类,以对Web应用程序执行自动跨浏览器测试。

当我们尝试通过Selenium自动化测试来自动化测试脚本时,我们需要考虑这些组合,以声明一个特定的测试环境,在该环境下,我们的网站或Web应用程序应无缝呈现。

这些环境可以是移动设备,移动浏览器,桌面设备,桌面浏览器,屏幕分辨率等。要在我们的Selenium自动化测试脚本中声明这些环境,我们在Selenium测试或Appium测试中使用了所需功能,而这正是我们将在本文中讨论。

我将帮助您熟悉硒测试中的所需功能和Appium的所需功能。 我将通过示例向您展示它们的含义,它们如何用于Selenium自动化测试和Appium测试。 事不宜迟,让我们开始吧。

什么是所需功能?

所需功能类是org.openqa.selenium.remote.DesiredCapabilities包的组件。 它有助于Selenium WebDriver设置浏览器的属性。 因此,使用与Desired Capabilities类不同的功能,我们可以设置浏览器的属性。 例如,浏览器的名称,浏览器的版本等。我们将这些功能用作键值对,以便为浏览器设置它们。

您可以参考github库以获得所需的功能的所有详细方法等。

在进行Selenium自动化测试时,我们在执行时总是有不同的要求,特别是要执行哪个浏览器,用于测试执行的操作系统和版本,这在Selenium Grid上对Desired Capabilities有很大帮助。

要在使用Grid的Selenium自动化测试中声明所需功能,我们可以使用DesiredCapabilities类中的setCapability方法来设置浏览器的不同类型的功能(例如Chrome,IE,Firefox,Edge)平台名称(例如Windows,macOS)等)。

设置Selenium网格以在不同的浏览器中并行执行

Appium中的所需功能在移动应用程序自动化的情况下非常有用,在这种情况下,我们必须在不同的浏览器属性和设备属性上执行测试自动化 ,可以使用“所需功能”类进行设置。 为了对不同类型的移动设备,iOS,Android等不同类型的移动平台进行自动化测试 。此外,可以有不同的平台(操作系统)版本,例如Android 9.x,10.x和iOS 12 .x,13.x等,我们可以根据需要使用Appium for Android或iOS中的“所需功能”来设置这些属性。

硒和砷还有更多所需功能

通过使用Desired Capabilities类,我们向WebDriver指示了有关环境,例如浏览器名称,浏览器版本,平台等,我们将使用自动化脚本在该环境上执行自动化浏览器测试 。 但这不是我们使用Desired Capabilities类所能做的。 我们还可以配置浏览器特定的首选项,例如启用chrome选项,firefox选项,使用隐身模式进行测试,甚至禁用javascript等。

使用禁用JavaScript设置进行Selenium自动化测试

如果您使用的是基于云的在线Selenium网格 ,那么Desired Capabilities类也可以用于与Selenium或Appium进行并行测试,使用Selenium 测试本地托管的Web应用程序 ,生成按命令的屏幕截图,甚至是视频通过不同的浏览器和OS配置记录整个测试自动化执行情况。

所需能力方法的类型

现在,让我们讨论所需功能类中可用的不同方法,以在测试自动化中设置不同的属性。

public java.lang.Object getCapability(java.lang.String capabilityName)

类Desired Capabilities中的getCapability()方法,该方法可用于获取我们正在使用的当前系统的功能。

public java.lang.Object getCapability(java.lang.String capabilityName)

该类来自Desired Capabilities的setCapability()方法可用于设置设备名称,平台名称,平台版本,被测应用程序的绝对路径,应用程序活动(在移动自动化中),应用程序包( Java)等

public java.lang.String getBrowserName()

类Desired Capabilities中的getBrowserName()方法可用于获取浏览器的名称。

public void setBrowserName(java.lang.String browserName)

类Desired Capabilities中的setBrowserName()方法可用于设置浏览器的名称。

public java.lang.String getVersion()

类Desired Capabilities中的getVersion()方法可用于获取浏览器或平台的版本。

public void setVersion(java.lang.String version)

类Desired Capabilities中的setVersion()方法可用于设置浏览器或平台的版本。

public Platform getPlatform()

类Desired Capabilities中的getPlatform()方法可用于获取平台的详细信息。

public Platform setPlatform()

类Desired Capabilities中的setPlatform()方法可用于设置平台的详细信息。

有关更多信息,您可以参考Selenium文档 。

针对不同浏览器进行硒测试所需的功能

在上一节中,我们看到了所需功能类的不同方法。 现在,让我们讨论如何为不同的浏览器设置不同的功能。

Selenium WebDriver for Chrome中所需的功能

当我们要自定义和配置Selenium WebDriver for Chrome中的所需功能时,我们需要调用ChromeDriver会话以利用这些功能。 因此,让我们讨论一下ChromeDriver支持的功能,以及如何使用它们在Selenium Webdriver for Chrome中设置所需的功能。

有两种方法可以设置ChromeDriver的功能。

1. ChromeOptions

2.所需功能

ChromeOptions是另一类,可以与Selenium WebDriver for Chrome中的所需功能结合使用,以自定义或操纵Chrome浏览器的各种属性。
以下是ChromeOptions类的常用参数

Disable-infobars:用于防止chrome浏览器显示诸如“ Chrome由自动化软件控制”之类的通知。

Make-default-browser:用于将chrome浏览器设置为默认浏览器。

Disable-popup-blocking:禁用chrome浏览器中显示的弹出窗口。

隐身模式以隐身模式打开Chrome浏览器

start -maximized:以最大化模式打开Chrome浏览器

无头:用于以无头模式打开Chrome浏览器。

现在,让我们讨论一个广告拦截器的示例,其中将Chrome Option与Desired Capabilities类结合使用。 为此,我们将使用adblocker扩展程序。
前提条件是应下载扩展名的crx文件

//Setting up capabilities to run our test script
ChromeOptions opt = new ChromeOptions();opt.addExtensions(new File(“path for crx file of the extension”));DesiredCapabilities capabilities = new DesiredCapabilities();capabilities.setCapability(ChromeOptions.CAPABILITY, options);ChromeDriver driver = new ChromeDriver(capabilities);

Selenium WebDriver for Firefox中所需的功能

就像我们在Chrome浏览器中看到的那样,还有一些方法可以自定义Firefox浏览器的Selenium WebDriver中的所需功能。

moz:firefoxOptions功能专门用于Firefox浏览器。 我们可以使用moz:firefoxOptions来自定义或操纵Firefox浏览器的不同属性,这有助于我们控制Firefox浏览器的行为。 它通常作为两者之一的成员被调用,一个是来自alwaysMatch ,另一个是来自firstMatch条目。

moz:firefoxOptions可以包含以下内容,这些内容可以控制Firefox浏览器的启动或运行方式。

a)binary(String):我们提供供自定义Firefox二进制文件使用的绝对路径。 通常,GeckoDriver(我们用于Firefox的驱动程序)会尝试查找Firefox在当前系统上的位置(如果未定义)。

b)args(字符串数组):此参数用于将命令行参数传递给Firefox二进制文件。 使用此语法时,应包含连字符/连字符,例如[“ -profile”]。
因此,要通过GeckoDriver提取现有配置文件,我们应该使用如下语法
[“-个人资料”,“个人资料的路径”]

c)profile(string):我们可以提供目录的路径,以便可以使用Firefox实例。 要安装某些firefox扩展名或某些自定义证书,我们可以使用它。 虽然建议在我们要设置自定义首选项的同时使用首选项,而不要直接传递配置文件。 您可以在下面找到其他偏好的示例。

这是在Firefox的Selenium WebDriver中声明所需功能的示例。

{"capabilities": {"alwaysMatch": {"moz:firefoxOptions": {"binary": "/usr/local/firefox/bin/firefox","args": ["-headless", "-profile", "/path/to/my/profile"],"prefs": {"dom.ipc.processCount": 9,"javascript.options.showInConsole": true},"log": {"level": "trace"}}}}}
if(driverParameter == null || driverParameter.equalsIgnoreCase(FIREFOX))
{DesiredCapabilities capabilities = DesiredCapabilities.firefox();FirefoxOptions options = new FirefoxOptions();options.setHeadless(headless);capabilities.merge(options);
}

IE(Internet Explorer)的Selenium WebDriver中所需的功能

现在,让我们继续使用Selenium WebDriver for IE(Internet Explorer)中的所需功能。 对于IE,我们使用Selenium WebDriver中具有所需功能InternetExplorerOptions

这是在Selenium WebDriver for IE中声明所需功能的示例。

if(driverParameter == null || driverParameter.equalsIgnoreCase(IE))
{DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();InternetExplorerOptions option = new InternetExplorerOptions();option.setHeadless(headless);capabilities.merge(option);
}

我们几乎没有可以使用的Internet Explorer特定功能,让我们一一讨论。

a)ignoreZoomSetting(boolean):此功能可用于忽略对浏览器的缩放级别达到100%的检查。 默认情况下,它设置为false。 它需要一个布尔值作为输入。

b)initialBrowserUrl(string):使用此功能,我们可以确定初始URL,在Internet Explorer浏览器启动时应重定向到的初始网站。 它以字符串作为输入。

c)enableElementCacheCleanup(boolean):此功能提供对元素缓存中过时元素的检查。 如果找到它们,该功能将指示WebDriver进行清理。 它需要一个布尔值作为输入。

d)requireWindowFocus(boolean):此功能用于指示驱动程序在执行任何操作(如鼠标或键盘事件等)之前检查Internet Explorer窗口是否具有焦点。它采用布尔值作为输入,默认情况下,它是设为假。

e)ignoreProtectedModeSettings(boolean):如果您希望在执行Selenium自动化测试时跳过保护模式检查,则可以利用此功能。 它需要一个布尔值作为输入。

因此,这些是我们可以使用的某些Internet Explorer特定功能。

不同语言的硒测试中所需功能的示例

现在,我将向您演示如何在使用不同语言的Selenium测试中利用所需功能。 您可能已经知道,Selenium自动化测试受多种编程语言支持。 它为每种主要编程语言(例如JavaScript,C#,Python,Java,Ruby,PHP)提供绑定。 为了让您了解如何在Selenium测试中利用所需的功能,我将提供Java,C#和Python的示例。

Selenium WebDriver for Java中所需的功能

//Setting up capabilities to run our test script@BeforeClasspublic void setUp() throws Exception {DesiredCapabilities capabilities = new DesiredCapabilities();capabilities.setCapability("browserName", "chrome");capabilities.setCapability("version", "77.0");capabilities.setCapability("platform", "win10"); // If this cap isn't specified, it will just get any available onecapabilities.setCapability("build", "LambdaTestSampleApp");capabilities.setCapability("name", "LambdaTestJavaSample");capabilities.setCapability("network", true); // To enable network logscapabilities.setCapability("visual", true); // To enable step by step screenshotcapabilities.setCapability("video", true); // To enable video recordingcapabilities.setCapability("console", true); // To capture console logscapabilities.setCapability("selenium_version","4.0.0-alpha-2");capabilities.setCapability("timezone","UTC+05:30");capabilities.setCapability("geoLocation","IN");capabilities.setCapability("chrome.driver","78.0");try {driver = new RemoteWebDriver(new URL("https://" + username + ":" + accesskey + gridURL), capabilities);} catch (MalformedURLException e) {System.out.println("Invalid grid URL");} catch (Exception e) {System.out.println(e.getMessage());}}

Selenium WebDriver for C#所需的功能

//Accept all certificates Chrome 
DesiredCapabilities capability = DesiredCapabilities.Chrome();
Environment.SetEnvironmentVariable("webdriver.chrome.driver", "Path to ChromeDriver.exe");
capability.SetCapability(CapabilityType.AcceptSslCertificates, true);
IWebDriver driver = new RemoteWebDriver(capability);//Set Chrome options.
ChromeOptions options = new ChromeOptions();
DesiredCapabilities dc = DesiredCapabilities.Chrome();
dc.SetCapability(ChromeOptions.Capability, options);
IWebDriver driver = new RemoteWebDriver(dc);//Turn off the JavaScript Firefox
FirefoxProfileManager profileManager = new FirefoxProfileManager();
FirefoxProfile profile = profileManager.GetProfile("TestProfile");
profile.SetPreference("javascript.enabled", false);
IWebDriver driver = new FirefoxDriver(profile);//Set the default page load timeout
driver.Manage().Timeouts().SetPageLoadTimeout(new TimeSpan(10));//Start Firefox with plugins
FirefoxProfile prof = new FirefoxProfile();
profile.AddExtension(@"C:Location of extension.xpi");
IWebDriver driver = new FirefoxDriver(prof);//Start Chrome with an unpacked extension
ChromeOptions options = new ChromeOptions();
options.AddArguments("load-extension=/pathTo/extension");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.SetCapability(ChromeOptions.Capability, options);
DesiredCapabilities dc = DesiredCapabilities.Chrome();
dc.SetCapability(ChromeOptions.Capability, options);
IWebDriver driver = new RemoteWebDriver(dc);//Start Chrome with a packed extension
ChromeOptions options = new ChromeOptions();
options.AddExtension(Path.GetFullPath("localpathto/extension.crx"));
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.SetCapability(ChromeOptions.Capability, options);
DesiredCapabilities dc = DesiredCapabilities.Chrome();
dc.SetCapability(ChromeOptions.Capability, options);
IWebDriver driver = new RemoteWebDriver(dc);

Selenium WebDriver for Python中所需的功能

def _get_desired_capabilities():""""""platform = _TEST_SETTINGS['PLATFORM']browser = _TEST_SETTINGS['BROWSER']version = _TEST_SETTINGS['VERSION']if platform and browser:capabilities = {'platform': platform,'browserName': browser,'version': version,}elif browser.lower() == 'firefox':capabilities = DesiredCapabilities.FIREFOXelse:capabilities = DesiredCapabilities.CHROMEreturn _add_travis_info(capabilities)def run_browser(self,os_name,os_version,browser,browser_version):USERNAME = ‘test.lambdatest@gmail.com’PASSWORD = ‘Test123’if browser.lower() == 'ff' or browser.lower() == 'firefox':desired_capabilities = DesiredCapabilities.FIREFOX            elif browser.lower() == 'ie':desired_capabilities = DesiredCapabilities.INTERNETEXPLORERelif browser.lower() == 'chrome':desired_capabilities = DesiredCapabilities.CHROME            elif browser.lower() == 'opera':desired_capabilities = DesiredCapabilities.OPERA        elif browser.lower() == 'safari':desired_capabilities = DesiredCapabilities.SAFARIdesired_capabilities['os'] = os_namedesired_capabilities['os_version'] = os_versiondesired_capabilities['browser_version'] = browser_versionreturn webdriver.Remote(RemoteConnection("http://%s:%s@hub-cloud.browser.com/wd/hub"%(USERNAME,PASSWORD),resolve_ip= False),desired_capabilities=desired_capabilities)

使用LambdaTest Capabilities Generator设置硒功能

Lambdatest是基于云的跨浏览器测试工具,可让您在包含2000多种实际浏览器的在线Selenium Grid上执行Selenium自动化测试。 Selenium支持的所有语言和框架都与LambdaTest兼容。

您还将获得与众多第三方CI / CD工具,项目管理工具,协作工具等的集成。

作为在线Selenium网格即服务提供商,我们了解DesiredCapabilities在您的Selenium自动化测试体验中的重要性。 我们还了解到,每次要在数百种浏览器和操作系统组合上运行测试时,写下您所需的功能可能要花费大量时间。 这就是为什么我们提供了一个在线DesiredCapabilities 生成器的原因 ,该生成器根据您的点击选择为您提供了多种编程语言的DesiredCapabilities类。

因此,当我们使用上述URL从LambdaTest导航到功能生成器时,您将看到如下屏幕

正如我们在上面的屏幕快照中看到的那样,我们可以选择我们要在测试脚本中使用的属性,并在选择所需的信息后生成所需的功能。
以下屏幕显示了生成的功能,我们可以在测试脚本中直接使用这些功能。

您是否注意到我们在Selenium 4中使用了所需功能? 如果看上面的图片,您会发现在Selenium 4标签下的下拉菜单中进行了点击选择。

LambdaTest功能生成器上的Selenium 4所需功能

使用LambdaTest作为在线Selenium Grid的另一个好处是。 您将获得最新的浏览器,浏览器版本以及在我们的云服务器上托管的计算机上预安装的操作系统。 那还不是全部! 您还将获得最新的Selenium 4所需的功能,所有这些功能都可以在您的自动浏览器测试脚本中启动。

在硒测试中结合了所需功能的示例脚本

现在,让我们以一个简单的例子来演示如何在Selenium自动化测试脚本中适合这些所需的功能。 因此,当我们准备好生成所需的所需功能时,我们已在以下测试脚本中使用了该脚本,该脚本可在多个浏览器上执行,以使用LambdaTest提供的Selenium Grid在2000多种真实浏览器上执行跨浏览器测试。

自动化脚本示例:

package com.lambdatest;//TestNG Todo : Sample App
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import org.testng.asserts.Assertion;import com.beust.jcommander.Parameter;import java.net.MalformedURLException;
import java.net.URL;
import java.util.Set;
import java.util.concurrent.TimeUnit;public class Test2{public String username = "Your_LambdaTest_Username";public String accesskey = "Your_LambdaTest_Access_Key";public static RemoteWebDriver driver = null;public String gridURL = "@hub.lambdatest.com/wd/hub";boolean status = false;//Setting up capabilities to run our test script@Parameters(value= {"browser","version"})@BeforeClasspublic void setUp(String browser, String version) throws Exception {DesiredCapabilities capabilities = new DesiredCapabilities();capabilities.setCapability("browserName", browser);capabilities.setCapability("version", version);capabilities.setCapability("platform", "win10"); // If this cap isn't specified, it will just get the any available onecapabilities.setCapability("build", "LambdaTestSampleApp");capabilities.setCapability("name", "LambdaTestJavaSample");capabilities.setCapability("network", true); // To enable network logscapabilities.setCapability("visual", true); // To enable step by step screenshotcapabilities.setCapability("video", true); // To enable video recordingcapabilities.setCapability("console", true); // To capture console logscapabilities.setCapability("selenium_version","4.0.0-alpha-2");capabilities.setCapability("timezone","UTC+05:30");capabilities.setCapability("geoLocation","IN");capabilities.setCapability("chrome.driver","78.0");try {driver = new RemoteWebDriver(new URL("https://" + username + ":" + accesskey + gridURL), capabilities);} catch (MalformedURLException e) {System.out.println("Invalid grid URL");} catch (Exception e) {System.out.println(e.getMessage());}}//Opening browser with the given URL and navigate to Registration Page@BeforeMethodpublic void openBrowser(){//   	driver.manage().deleteAllCookies();driver.get("https://www.lambdatest.com/");driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);driver.manage().timeouts().pageLoadTimeout(15, TimeUnit.SECONDS);WebElement signUpButton = driver.findElement(By.xpath("//a[contains(text(),'Start Free Testing')]"));signUpButton.click(); }//Verifying elements on Registration page@Testpublic void verifyElementsOnPageTest(){WebElement lambdaTestLogo = driver.findElement(By.xpath("//p[@class='signup-titel']"));lambdaTestLogo.isDisplayed();WebElement signUpTitle = driver.findElement(By.xpath("//p[@class='signup-titel']"));signUpTitle.isDisplayed();WebElement termsText = driver.findElement(By.xpath("//label[@class='woo']"));termsText.isDisplayed();WebElement loginLinkText = driver.findElement(By.xpath("//p[@class='login-in-link test-left']"));loginLinkText.isDisplayed();}  // Closing the browser session after completing each test case@AfterClasspublic void tearDown() throws Exception {if (driver != null) {((JavascriptExecutor) driver).executeScript("lambda-status=" + status);driver.quit();}}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite thread-count="3" name="LambaTestSuite" parallel="tests"><test name="ChromeTest"><parameter name="browser" value="chrome"/><parameter name="version" value="77.0"/><classes><class name="com.lambdatest.Test2"/></classes></test> <!-- Test --></suite> <!-- Suite -->

LambdaTest自动化仪表板上的输出

在LambdaTest的在线Selenium Grid上执行上述脚本后,我们通过LambdaTest上的自动化仪表板获得以下自动化日志。 您可以在自动化仪表盘下获得不同类型的日志,例如网络日志,命令日志,元数据,视频记录,屏幕截图等。在下面的屏幕截图中,我希望您关注LambdaTest提供的原始硒日志。

您会注意到,自动化脚本中声明的功能显示在此处。

Appium中用于移动自动化的所需功能

到现在为止,我们已经看到了所需的功能,这些功能具有不同的语言,浏览器和可用的不同方法。 我希望到目前为止,您对如何在Selenium自动化测试中使用所需功能有了一个好主意。 但是,Selenium自动化测试只能确保您的Web应用程序适用于台式机设备,但是您的客户可能正在使用他们的手机访问您的Web应用程序或网站,尤其是您的博客页面。

我们生活在移动优先时代。 桌面上进行的自动浏览器测试不能确保您的网站与跨浏览器兼容 。 几乎每个企业都在向数字化发展,因此它要求网站或Web应用程序同时支持台式机和移动设备。 这意味着您可能还必须通过移动浏览器执行自动浏览器测试!

那么,我们如何为移动浏览器执行自动化浏览器测试? 好消息是,还有另一个引人注目的开源框架可以帮助您实现这一目标,它被称为Appium。

现在,我们将讨论Appium测试,以及如何在Appium中使用所需的功能。

因此,对平台或操作系统(例如Android,iOS),平台版本,设备等可能会有不同的要求,这些要求与我们在进行Web应用程序自动化时的要求相似。 这是Appium所需功能在移动Web应用程序的自动浏览器测试中发挥作用的地方。

Appium测试中所需功能的示例

当请求新的自动化会话时,Appium客户端将请求与JSON对象一起发送给服务器,该JSON对象包括键和值对形式的所需功能。

使用JSON对象中的这些键和值,我们提供决定和指导appium驱动程序有关我们希望我们的移动自动化测试如何工作的方式。

然后,可以在Appium服务器中设置所需功能,或者我们也可以在Webdriver测试脚本中添加所需功能。

以下是使用JSON对象进行Appium测试所需功能的示例:

{“platformName”: “Android”,“platformVersion”: “10.0”,“deviceName”:  “Samsung Galaxy s10”,“automationName”: “Appium”,“app”: “path for the app under test”
}

因此,在通过JSON对象进行Appium测试中使用以上期望的功能时,我们指示驱动程序使用Appium在具有给定文件位置的应用程序上在Android版本10.0的设备Samsung Galaxy s10上启动移动自动化会话。

Appium支持不同的所需功能,其中某些功能是所有平台或驱动程序共有的,而某些功能是特定于驱动程序或平台的。 在继续进行时,让我们讨论其中的一些。

Appium测试中的常规或标准所需功能

  1. automationName:使用此功能,我们可以指导驱动程序应该使用哪个自动化引擎。 默认情况下,它设置为Appium。 其他可用的引擎,例如Appium,Espresso(两者均适用于android),XCUITest(适用于iOS)
  2. platformName:我们可以使用它来指导有关移动操作系统平台(如iOS,Android等)的信息。
  3. platformVersion :我们可以使用它来提及期望在其上执行测试的移动操作系统版本。
  4. deviceName:我们可以使用它来指定要在其上执行自动化浏览器测试的特定移动设备。 就像我们在上面的示例中使用Samsung Galaxy s10一样。
  5. app:此功能用于提供需要使用脚本进行测试的应用程序的路径。 在这里,我们提供带有HTTP URL的绝对本地路径或远程路径。
  6. browserName:当我们要在移动Web浏览器上执行测试时,可以使用此名称。 我们可以提供浏览器的名称,例如iOS的Safari,Android的Chrome等。当我们要使应用程序自动化而不使用浏览器时,可以将其保留为空。
  7. 语言:可用于设置Android或iOS的语言。
  8. newCommandTimeout:此功能有助于指示驱动程序其在结束空闲会话之前必须等待来自客户端的新命令的时间。

几乎没有其他常规功能,例如noReset,fullReset,eventTimings等。

适用于Android的Appium中所需的功能

  1. appActivity:使用此功能可以声明要从包中启动的Android活动的名称。 例如.MainActivity,.Settings
  2. appPackage:使用此功能,我们确定要执行的Android应用程序的JAva软件包。 默认情况下,程序包清单提供此功能。
    例如com.example.android.testApp
  3. appWaitActity:此功能提供我们要等待的android活动的名称。
  4. appWaitPackage:这提供了我们要等待的android应用程序的java包。
  5. appWaitDuration:此功能用于指示等待等待的毫秒数以启动appWaitActivity。
  6. deviceReadyTimeout:当驱动程序等待被测设备准备就绪时,此功能指示以秒为单位的超时时间。

除了上述android功能外,还有其他一些功能,例如adbPort,systemPort,remoteAdbHost,androidInstallPath等。

适用于iOS的Appium中所需的功能

  1. calendarFormat:此功能可用于设置iOS模拟器的日历格式。 例如格里高利安
  2. launchTimeout:此功能指示驱动程序必须等待的时间(以毫秒为单位),之后该时间将会话视为失败或挂起。
  3. autoAcceptAlerts; 此功能用于接受所有iOS警报,如果它们在执行自动浏览器测试时弹出。 例如:隐私访问权限警报,例如位置,联系人等。
  4. autoDismissAlerts:此功能用于在执行自动浏览器测试时弹出所有iOS警报时拒绝/关闭它们。 例如:隐私访问权限警报,例如位置,联系人等。
  5. safariInitialUrl:使用此功能,我们可以为safari浏览器设置初始URL,因此在启动浏览器时,它可以用作欢迎页面。
  6. appName:此功能用于显示正在测试的应用程序的名称。

除了上述iOS功能之外,safariAllowPopups, customSSLCert等还很少。

因此,我们已经看到了期望的功能,可以在使用不同浏览器,不同语言的示例创建测试时使用这些功能,并且还针对具有不同平台/操作系统的Ap​​pium进行了讨论。

LambdaTest功能生成器在Appium中提供所需的功能

LambdaTest所需功能生成器现在也提供了Appium功能。 它们可以在Appium标签下找到。 您可以在Android和iOS浏览器上进行测试,以确保您的Web应用程序能够正常运行。

我们学到了什么

在执行Selenium自动化测试时,我们需要声明一组有关测试环境的基本要求,例如特定的浏览器,操作系统等。 这可以通过Selenium测试和Appium测试的Desired Capabilities类来实现。

我们还可以指定执行测试所需的条件,例如本地托管的测试,并行测试,禁用JavaScript的测试等等。

如果您已经通过我们的“所需功能生成器”使用LambdaTest,则可以轻松生成此“所需功能”类,该生成器会根据下拉菜单中的测试要求为您提供该类。

如果您希望执行Selenium自动化测试以确保进行更广泛的浏览器兼容性测试,那么LambdaTest是所有最新浏览器,操作系统,Selenium版本的首选存储。 测试愉快! 🙂


翻译自: https://www.javacodegeeks.com/2019/12/desired-capabilities-in-selenium-testing-with-examples.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

边沿触发是什么意思_集基耦合双稳电路,集成化单稳电路,数字逻辑电路,门电路,触发器...

1).箝位器能把脉冲电压维持在某个数值上而使波形保持不变的电路称为箝位器。它也是整形电路的一种。例如电视信号在传输过程中会造成失真&#xff0c;为了使脉冲波形恢复原样&#xff0c;接收机里就要用箝位电路把波形顶部箝制在某个固定电平上。下图中反相器输出端上就有一个箝…

鲸鱼优化算法_盘点 35 个 Java 代码优化细节

代码优化&#xff0c;一个很重要的课题。可能有些人觉得没用&#xff0c;一些细小的地方有什么好修改的&#xff0c;改与不改对于代码的运行效率有什么影响呢&#xff1f;这个问题我是这么考虑的&#xff0c;就像大海里面的鲸鱼一样&#xff0c;它吃一条小虾米有用吗&#xff1…

powerbi导入地图_Power BI系列教程之powerBI功能介绍及使用导引(一)

作为从事数据分析相关工作的小伙伴&#xff0c;我们总会遇到一些工作是每周、每月甚至每天都是重复做的工作&#xff0c;这个时候我们有没有一种结构化的方法来处理这一些数据呢&#xff1f;答案是肯定的&#xff0c;微软为了满足广大职场数据分析人员的需求&#xff0c;开发了…

模糊搜索怎么实现_干货 | 你真的了解自己是怎么搜索的吗_01

「干货」栏目的开启是为了帮大家科普学习关于品牌出海、数字营销与跨境电商行业相关的知识&#xff0c;以及我们在业内会遇到的情况和一些规避的方法。第一讲搜索者我们整个搜索营销活动都是围绕搜索者展开的我们的目的是把搜索者转化为我们的销售机会所以&#xff0c;研究搜索…

JUnit 5和Selenium –改善项目配置

Selenium是一组支持浏览器自动化的工具和库&#xff0c;主要用于Web应用程序测试。 Selenium的组件之一是Selenium WebDriver&#xff0c;它提供客户端库&#xff0c;JSON有线协议&#xff08;与浏览器驱动程序进行通信的协议&#xff09;和浏览器驱动程序。 Selenium WebDrive…

linux shc shell脚本_详解shell脚本加密解密软件—gzese和shc

概述以我个人的需求为例&#xff0c;有时写一个脚本需要传密码&#xff0c;如果直接把密码写在脚本里会存在安全问题&#xff0c;一般是把密码写在脚本里&#xff0c;作为参数传给脚本&#xff0c;而保存密码的脚本&#xff0c;使用某种手段加密&#xff0c;令其不可读但是可执…

python3 for计数_python怎么实现计数?

python中实现计数的一般方法&#xff1a;1、使用字典解决(dict)字典计数是最常用的计数方法&#xff0c;逐个遍历数据结构中元素&#xff0c;将元素作为键&#xff0c;元素个数作为值进行统计&#xff0c;依次加入字典中。实例演示test_lst [a, b, c, d, e, f, g, a, f, s, b,…

linux 查看主板sn_如何在 Linux 上查找硬件规格

在 Linux 系统上有许多工具可用于查找硬件规格。-- Sk(作者)在 Linux 系统上有许多工具可用于查找硬件规格。在这里&#xff0c;我列出了四种最常用的工具&#xff0c;可以获取 Linux 系统的几乎所有硬件(和软件)细节。好在是这些工具在某些 Linux 发行版上默认预装。我在 Ubun…

输入流输出流是以内存为标准_构建用于测试的超大内存输入流

输入流输出流是以内存为标准由于某种原因&#xff0c;我需要非常大的&#xff0c;甚至可能是无限的InputStream &#xff0c;它会反复地反复返回相同的byte[] 。 这样&#xff0c;我可以通过重复小样本来产生疯狂的大数据流。 可以在Guava中找到类似的功能&#xff1a; Iterabl…

laravel 分词搜索匹配度_【地名地址】面向智慧城市的高精度地名地址匹配方法...

点击上方蓝字关注我们↑↑↑↑原 文 摘 要针对智慧城市建设中各种业务数据对地名地址匹配准确度和效率不高的问题&#xff0c;本文提出一种面向智慧城市的高精度地名地址匹配方法。该方法在基于中文分词的地名地址匹配技术框架下&#xff0c;综合利用精细化地名地址库构建、地名…

使用通用mapper实现条件查询_使用dsum轻松搞定多条件查询,学会它,再也想用sumifs了...

在excel中条件求和想必大家都不陌生&#xff0c;这个可以说是我们工作中经常遇到的问题&#xff0c;常见的条件求和函数有sumif以及sumifs&#xff0c;但是还有一个更加强但知道的人却非常少的函数&#xff0c;他就是dsum函数&#xff0c;dsum相交于sumif以及sumifs函数理解起来…

输入文字自动生成图片_批量生成变化的图片文字海报

最近“双十一”活动大家已经进入了鸡血状态&#xff0c;运营的小伙伴给设计出了个难题&#xff0c;搞的设计小伙伴们进入了癫狂模式。本着工具提升效率的原则&#xff0c;我又开始去研究如何批量修改图片内容了&#xff0c;小小的成果和大家分享一下。提出问题为每一位支付了定…

生成私钥 p q rsa_【安全】理解 RSA 算法

Public-key Crytography简介Public-key cryptography (公开密钥加密) 又称 asymmetric cryptography (非对称加密)&#xff0c;即存在两把不同的密钥&#xff0c;分别称为公钥 Pu 和私钥 Pr&#xff0c;公钥通常用来加密明文 M&#xff0c;只有私钥才能解密密文 C&#xff0c;如…

Java:如何创建轻量级数据库微服务

基于云的Java数据库应用程序的数量每分钟都在增加。 许多组织部署了数百甚至数千个微服务实例。 但是&#xff0c;相对于运行时环境&#xff0c;大多数应用程序会带来惊人数量的不必要开销。 反过来&#xff0c;这会使应用程序运行更慢&#xff0c;运行成本更高。 在本文中&am…

垃圾分类毕设java程序_垃圾“拍一拍”,分类不用愁!生活垃圾分类查询小程序上线啦...

垃圾种类太多&#xff1f;分类容易搞混&#xff1f;乐清人 注意啦&#xff0c;拿起手机就能查&#xff01;11月6日&#xff0c;生活垃圾分类查询系统登陆乐清市综合行政执法局官方微信公众号&#xff0c;输入垃圾名称即可快速了解垃圾所属哪一类&#xff0c;还有拍照识别查询&a…

带有Prometheus的弹簧靴和千分尺第5部分:旋转Prometheus

以前&#xff0c;我们获得了Spring Boot Application适配器&#xff0c;以便为Prometheus公开端点。 该博客将重点介绍如何设置和配置Prometheus&#xff0c;以便为Spring Boot端点提供服务器。 因此&#xff0c;让我们开始使用docker来启动Prometheus服务器。 在继续进行Pr…

允许跨域访问_PHP设置多域名允许跨域访问

php中文网最新课程 每日17点准时技术干货分享 针对 PHP 语言设置多域名允许跨域访问 服务器变量: 服务器变量存储在 $_SERVER 数组中,在这个数组中有一个特殊的键值:HTTP_ORIGIN。 这个键只在跨域的时候才会存在值,同源时为空字符串 响应头设置允许某域名访问:access-cont…

python函数的作用降低编程复杂度_Python函数式编程

lambda本文将介绍Python中函数式编程的特性。在对函数式编程的概念有了了解后&#xff0c;本文会介绍iterators和generators等语言特性&#xff0c;还有itertools和functools等相关的库。函数式编程本章节将会介绍函数式编程的一些基本概念&#xff1b;如果只是对Python的语言特…

Apache Camel 3.1 –即将推出更多骆驼核心优化

希望一切都很好&#xff0c;您可以安全进入2020年。 Camel团队已经在忙于开发下一个Camel 3.1版本。 目标之一是继续优化骆驼核心&#xff0c;这一次我们花了一些时间来寻找路由引擎中的一些热点。 我们所研究的方面之一也是在Camel路由的每个消息中发生的对象分配。 JVM本身…

判断字符为空_算法题:字符串转换整数 (atoi)

题目描述题解分析他人更优解一、题目描述二、题解import math class Solution:def myAtoi(self,str):str str.strip() #去除字符串两边的空格if len(str) 0: return 0 #如果字符串为空返回0if not str[0].isdigit() and str[0] ! - and str[0] ! : #判断第一个字符是…