Java 如何在selenium服务器上提供自定义功能?
我知道一些selenium功能可以通过以下方法获得:Java 如何在selenium服务器上提供自定义功能?,java,selenium,remotewebdriver,desiredcapabilities,Java,Selenium,Remotewebdriver,Desiredcapabilities,我知道一些selenium功能可以通过以下方法获得: driver.getCapabilities().getBrowserName() 它返回浏览器名称的值 但如果它指的是一个可用的方法,如果我没有误解的话,这似乎与自定义功能有关,我的意思是: driver.getCapabilities().getCapability(“某物”) 返回:值,如果未设置,则返回null 所以,我试着编写一个简单的代码来获得我所说的值 private RemoteWebDriver driver;
driver.getCapabilities().getBrowserName()代码>
它返回浏览器名称的值
但如果它指的是一个可用的方法,如果我没有误解的话,这似乎与自定义功能有关,我的意思是:
driver.getCapabilities().getCapability(“某物”)代码>
返回:值,如果未设置,则返回null
所以,我试着编写一个简单的代码来获得我所说的值
private RemoteWebDriver driver;
private URL url;
private DesiredCapabilities dc = new DesiredCapabilities();
@Before
public void setUp() throws MalformedURLException {
url = new URL("http://localhost:4444/wd/hub");
dc.setCapability(CapabilityType.BROWSER_NAME, BrowserType.CHROME);
//this is custom capability i mean
dc.setCapability("testName", "Login");
driver = new RemoteWebDriver(url, dc);
}
@Test
public void test() {
some code.....
}
@After
public void tearDown() {
System.out.println("Browser Name : "+ driver.getCapabilities().getCapability("browserName"));
System.out.println("Test Name : "+ driver.getCapabilities().getCapability("testName"));
driver.quit();
}
使用json
,服务器日志显示:
Capabilities are: {
"browserName": "chrome",
"testName": "Login"
}
但是我得到一个null
值
如何进行正确的设置?您如何让我们的服务器提供我的意思是testName
的功能?并且可以通过driver.getCapabilities().getCapability(“testName”)获得代码>
当前结果浏览器名称:chrome
测试名称:null
预期结果浏览器名称:chrome
测试名称:登录
感谢advance您可以使用以下任一解决方案提取WebDriver功能,例如浏览器名称
、浏览器版本
、平台名称
,等等:
- 使用直接API:
- 代码块:
System.out.println("Class Name is : "+((RemoteWebDriver) driver).getCapabilities().getClass().toString());
System.out.println("Browser Name is : "+((RemoteWebDriver) driver).getCapabilities().getBrowserName().toLowerCase());
System.out.println("Browser Version is : "+((RemoteWebDriver) driver).getCapabilities().getVersion().toString());
System.out.println("Platform Name is : "+((RemoteWebDriver) driver).getCapabilities().getPlatform().toString());
Capabilities cap = ((RemoteWebDriver) driver).getCapabilities();
System.out.println("acceptInsecureCerts value is: "+cap.getCapability("acceptInsecureCerts"));
System.out.println("Browser Name is : "+cap.getBrowserName());
System.out.println("Browser version is : "+cap.getVersion());
System.out.println("Platform is : "+cap.getPlatform().toString());
System.out.println("javascriptEnabled value is: "+cap.getCapability("javascriptEnabled"));
System.out.println("moz:accessibilityChecks value is: "+cap.getCapability("moz:accessibilityChecks"));
System.out.println("moz:buildID value is: "+cap.getCapability("moz:buildID"));
System.out.println("geckodriverVersion value is: "+cap.getCapability("geckodriverVersion"));
System.out.println("Headless Mozilla value is: "+((RemoteWebDriver) driver).getCapabilities().getCapability("moz:headless"));
System.out.println("moz:headless value is: "+cap.getCapability("moz:headless"));
System.out.println("Mozilla Profile value is : "+ ((RemoteWebDriver) driver).getCapabilities().getCapability("moz:profile"));
System.out.println("moz:processID value is : "+cap.getCapability("moz:processID"));
System.out.println("moz:profile value is : "+cap.getCapability("moz:profile"));
System.out.println("moz:shutdownTimeout value is : "+cap.getCapability("moz:shutdownTimeout"));
System.out.println("moz:useNonSpecCompliantPointerOrigin value is : "+cap.getCapability("moz:useNonSpecCompliantPointerOrigin"));
System.out.println("moz:webdriverClick value is : "+cap.getCapability("moz:webdriverClick"));
System.out.println("pageLoadStrategy value is : "+cap.getCapability("pageLoadStrategy"));
System.out.println("Platform is : "+cap.getPlatform().toString());
System.out.println("platformName value is : "+cap.getCapability("platformName"));
System.out.println("platformVersion value is : "+cap.getCapability("platformVersion"));
System.out.println("rotatable value is : "+cap.getCapability("rotatable"));
System.out.println("setWindowRect value is : "+cap.getCapability("setWindowRect"));
System.out.println("strictFileInteractability value is : "+cap.getCapability("strictFileInteractability"));
System.out.println("timeouts values are : "+cap.getCapability("timeouts"));
System.out.println("unhandledPromptBehavior value is : "+cap.getCapability("unhandledPromptBehavior"));
- 控制台输出:
Class Name is : class org.openqa.selenium.MutableCapabilities
Browser Name is : firefox
Browser Version is : 67.0
Platform Name is : WINDOWS
acceptInsecureCerts value is: true
Browser Name is : firefox
Browser version is : 67.0
Platform is : WINDOWS
javascriptEnabled value is: true
moz:accessibilityChecks value is: false
moz:buildID value is: 20190516215225
geckodriverVersion value is: null
Headless Mozilla value is: false
moz:headless value is: false
Mozilla Profile value is : C:\Users\Debanjan.B\AppData\Local\Temp\rust_mozprofile.7HI7QUtzF1YP
moz:processID value is : 7308
moz:profile value is : C:\Users\Debanjan.B\AppData\Local\Temp\rust_mozprofile.7HI7QUtzF1YP
moz:shutdownTimeout value is : 60000
moz:useNonSpecCompliantPointerOrigin value is : false
moz:webdriverClick value is : true
pageLoadStrategy value is : normal
Platform is : WINDOWS
platformName value is : WINDOWS
platformVersion value is : 6.2
rotatable value is : false
setWindowRect value is : true
strictFileInteractability value is : false
timeouts values are : {implicit=0, pageLoad=300000, script=30000}
unhandledPromptBehavior value is : dismiss and notify
- 使用
getCapability()
:
- 代码块:
System.out.println("Class Name is : "+((RemoteWebDriver) driver).getCapabilities().getClass().toString());
System.out.println("Browser Name is : "+((RemoteWebDriver) driver).getCapabilities().getBrowserName().toLowerCase());
System.out.println("Browser Version is : "+((RemoteWebDriver) driver).getCapabilities().getVersion().toString());
System.out.println("Platform Name is : "+((RemoteWebDriver) driver).getCapabilities().getPlatform().toString());
Capabilities cap = ((RemoteWebDriver) driver).getCapabilities();
System.out.println("acceptInsecureCerts value is: "+cap.getCapability("acceptInsecureCerts"));
System.out.println("Browser Name is : "+cap.getBrowserName());
System.out.println("Browser version is : "+cap.getVersion());
System.out.println("Platform is : "+cap.getPlatform().toString());
System.out.println("javascriptEnabled value is: "+cap.getCapability("javascriptEnabled"));
System.out.println("moz:accessibilityChecks value is: "+cap.getCapability("moz:accessibilityChecks"));
System.out.println("moz:buildID value is: "+cap.getCapability("moz:buildID"));
System.out.println("geckodriverVersion value is: "+cap.getCapability("geckodriverVersion"));
System.out.println("Headless Mozilla value is: "+((RemoteWebDriver) driver).getCapabilities().getCapability("moz:headless"));
System.out.println("moz:headless value is: "+cap.getCapability("moz:headless"));
System.out.println("Mozilla Profile value is : "+ ((RemoteWebDriver) driver).getCapabilities().getCapability("moz:profile"));
System.out.println("moz:processID value is : "+cap.getCapability("moz:processID"));
System.out.println("moz:profile value is : "+cap.getCapability("moz:profile"));
System.out.println("moz:shutdownTimeout value is : "+cap.getCapability("moz:shutdownTimeout"));
System.out.println("moz:useNonSpecCompliantPointerOrigin value is : "+cap.getCapability("moz:useNonSpecCompliantPointerOrigin"));
System.out.println("moz:webdriverClick value is : "+cap.getCapability("moz:webdriverClick"));
System.out.println("pageLoadStrategy value is : "+cap.getCapability("pageLoadStrategy"));
System.out.println("Platform is : "+cap.getPlatform().toString());
System.out.println("platformName value is : "+cap.getCapability("platformName"));
System.out.println("platformVersion value is : "+cap.getCapability("platformVersion"));
System.out.println("rotatable value is : "+cap.getCapability("rotatable"));
System.out.println("setWindowRect value is : "+cap.getCapability("setWindowRect"));
System.out.println("strictFileInteractability value is : "+cap.getCapability("strictFileInteractability"));
System.out.println("timeouts values are : "+cap.getCapability("timeouts"));
System.out.println("unhandledPromptBehavior value is : "+cap.getCapability("unhandledPromptBehavior"));
- 控制台输出:
Class Name is : class org.openqa.selenium.MutableCapabilities
Browser Name is : firefox
Browser Version is : 67.0
Platform Name is : WINDOWS
acceptInsecureCerts value is: true
Browser Name is : firefox
Browser version is : 67.0
Platform is : WINDOWS
javascriptEnabled value is: true
moz:accessibilityChecks value is: false
moz:buildID value is: 20190516215225
geckodriverVersion value is: null
Headless Mozilla value is: false
moz:headless value is: false
Mozilla Profile value is : C:\Users\Debanjan.B\AppData\Local\Temp\rust_mozprofile.7HI7QUtzF1YP
moz:processID value is : 7308
moz:profile value is : C:\Users\Debanjan.B\AppData\Local\Temp\rust_mozprofile.7HI7QUtzF1YP
moz:shutdownTimeout value is : 60000
moz:useNonSpecCompliantPointerOrigin value is : false
moz:webdriverClick value is : true
pageLoadStrategy value is : normal
Platform is : WINDOWS
platformName value is : WINDOWS
platformVersion value is : 6.2
rotatable value is : false
setWindowRect value is : true
strictFileInteractability value is : false
timeouts values are : {implicit=0, pageLoad=300000, script=30000}
unhandledPromptBehavior value is : dismiss and notify
您可以在WebDriver的部分中找到支持的功能列表
W3C建议
您可以使用以下任一解决方案提取WebDriver功能,例如浏览器名称
、浏览器版本
、平台名称
,等等:
- 使用直接API:
- 代码块:
System.out.println("Class Name is : "+((RemoteWebDriver) driver).getCapabilities().getClass().toString());
System.out.println("Browser Name is : "+((RemoteWebDriver) driver).getCapabilities().getBrowserName().toLowerCase());
System.out.println("Browser Version is : "+((RemoteWebDriver) driver).getCapabilities().getVersion().toString());
System.out.println("Platform Name is : "+((RemoteWebDriver) driver).getCapabilities().getPlatform().toString());
Capabilities cap = ((RemoteWebDriver) driver).getCapabilities();
System.out.println("acceptInsecureCerts value is: "+cap.getCapability("acceptInsecureCerts"));
System.out.println("Browser Name is : "+cap.getBrowserName());
System.out.println("Browser version is : "+cap.getVersion());
System.out.println("Platform is : "+cap.getPlatform().toString());
System.out.println("javascriptEnabled value is: "+cap.getCapability("javascriptEnabled"));
System.out.println("moz:accessibilityChecks value is: "+cap.getCapability("moz:accessibilityChecks"));
System.out.println("moz:buildID value is: "+cap.getCapability("moz:buildID"));
System.out.println("geckodriverVersion value is: "+cap.getCapability("geckodriverVersion"));
System.out.println("Headless Mozilla value is: "+((RemoteWebDriver) driver).getCapabilities().getCapability("moz:headless"));
System.out.println("moz:headless value is: "+cap.getCapability("moz:headless"));
System.out.println("Mozilla Profile value is : "+ ((RemoteWebDriver) driver).getCapabilities().getCapability("moz:profile"));
System.out.println("moz:processID value is : "+cap.getCapability("moz:processID"));
System.out.println("moz:profile value is : "+cap.getCapability("moz:profile"));
System.out.println("moz:shutdownTimeout value is : "+cap.getCapability("moz:shutdownTimeout"));
System.out.println("moz:useNonSpecCompliantPointerOrigin value is : "+cap.getCapability("moz:useNonSpecCompliantPointerOrigin"));
System.out.println("moz:webdriverClick value is : "+cap.getCapability("moz:webdriverClick"));
System.out.println("pageLoadStrategy value is : "+cap.getCapability("pageLoadStrategy"));
System.out.println("Platform is : "+cap.getPlatform().toString());
System.out.println("platformName value is : "+cap.getCapability("platformName"));
System.out.println("platformVersion value is : "+cap.getCapability("platformVersion"));
System.out.println("rotatable value is : "+cap.getCapability("rotatable"));
System.out.println("setWindowRect value is : "+cap.getCapability("setWindowRect"));
System.out.println("strictFileInteractability value is : "+cap.getCapability("strictFileInteractability"));
System.out.println("timeouts values are : "+cap.getCapability("timeouts"));
System.out.println("unhandledPromptBehavior value is : "+cap.getCapability("unhandledPromptBehavior"));
- 控制台输出:
Class Name is : class org.openqa.selenium.MutableCapabilities
Browser Name is : firefox
Browser Version is : 67.0
Platform Name is : WINDOWS
acceptInsecureCerts value is: true
Browser Name is : firefox
Browser version is : 67.0
Platform is : WINDOWS
javascriptEnabled value is: true
moz:accessibilityChecks value is: false
moz:buildID value is: 20190516215225
geckodriverVersion value is: null
Headless Mozilla value is: false
moz:headless value is: false
Mozilla Profile value is : C:\Users\Debanjan.B\AppData\Local\Temp\rust_mozprofile.7HI7QUtzF1YP
moz:processID value is : 7308
moz:profile value is : C:\Users\Debanjan.B\AppData\Local\Temp\rust_mozprofile.7HI7QUtzF1YP
moz:shutdownTimeout value is : 60000
moz:useNonSpecCompliantPointerOrigin value is : false
moz:webdriverClick value is : true
pageLoadStrategy value is : normal
Platform is : WINDOWS
platformName value is : WINDOWS
platformVersion value is : 6.2
rotatable value is : false
setWindowRect value is : true
strictFileInteractability value is : false
timeouts values are : {implicit=0, pageLoad=300000, script=30000}
unhandledPromptBehavior value is : dismiss and notify
- 使用
getCapability()
:
- 代码块:
System.out.println("Class Name is : "+((RemoteWebDriver) driver).getCapabilities().getClass().toString());
System.out.println("Browser Name is : "+((RemoteWebDriver) driver).getCapabilities().getBrowserName().toLowerCase());
System.out.println("Browser Version is : "+((RemoteWebDriver) driver).getCapabilities().getVersion().toString());
System.out.println("Platform Name is : "+((RemoteWebDriver) driver).getCapabilities().getPlatform().toString());
Capabilities cap = ((RemoteWebDriver) driver).getCapabilities();
System.out.println("acceptInsecureCerts value is: "+cap.getCapability("acceptInsecureCerts"));
System.out.println("Browser Name is : "+cap.getBrowserName());
System.out.println("Browser version is : "+cap.getVersion());
System.out.println("Platform is : "+cap.getPlatform().toString());
System.out.println("javascriptEnabled value is: "+cap.getCapability("javascriptEnabled"));
System.out.println("moz:accessibilityChecks value is: "+cap.getCapability("moz:accessibilityChecks"));
System.out.println("moz:buildID value is: "+cap.getCapability("moz:buildID"));
System.out.println("geckodriverVersion value is: "+cap.getCapability("geckodriverVersion"));
System.out.println("Headless Mozilla value is: "+((RemoteWebDriver) driver).getCapabilities().getCapability("moz:headless"));
System.out.println("moz:headless value is: "+cap.getCapability("moz:headless"));
System.out.println("Mozilla Profile value is : "+ ((RemoteWebDriver) driver).getCapabilities().getCapability("moz:profile"));
System.out.println("moz:processID value is : "+cap.getCapability("moz:processID"));
System.out.println("moz:profile value is : "+cap.getCapability("moz:profile"));
System.out.println("moz:shutdownTimeout value is : "+cap.getCapability("moz:shutdownTimeout"));
System.out.println("moz:useNonSpecCompliantPointerOrigin value is : "+cap.getCapability("moz:useNonSpecCompliantPointerOrigin"));
System.out.println("moz:webdriverClick value is : "+cap.getCapability("moz:webdriverClick"));
System.out.println("pageLoadStrategy value is : "+cap.getCapability("pageLoadStrategy"));
System.out.println("Platform is : "+cap.getPlatform().toString());
System.out.println("platformName value is : "+cap.getCapability("platformName"));
System.out.println("platformVersion value is : "+cap.getCapability("platformVersion"));
System.out.println("rotatable value is : "+cap.getCapability("rotatable"));
System.out.println("setWindowRect value is : "+cap.getCapability("setWindowRect"));
System.out.println("strictFileInteractability value is : "+cap.getCapability("strictFileInteractability"));
System.out.println("timeouts values are : "+cap.getCapability("timeouts"));
System.out.println("unhandledPromptBehavior value is : "+cap.getCapability("unhandledPromptBehavior"));
- 控制台输出:
Class Name is : class org.openqa.selenium.MutableCapabilities
Browser Name is : firefox
Browser Version is : 67.0
Platform Name is : WINDOWS
acceptInsecureCerts value is: true
Browser Name is : firefox
Browser version is : 67.0
Platform is : WINDOWS
javascriptEnabled value is: true
moz:accessibilityChecks value is: false
moz:buildID value is: 20190516215225
geckodriverVersion value is: null
Headless Mozilla value is: false
moz:headless value is: false
Mozilla Profile value is : C:\Users\Debanjan.B\AppData\Local\Temp\rust_mozprofile.7HI7QUtzF1YP
moz:processID value is : 7308
moz:profile value is : C:\Users\Debanjan.B\AppData\Local\Temp\rust_mozprofile.7HI7QUtzF1YP
moz:shutdownTimeout value is : 60000
moz:useNonSpecCompliantPointerOrigin value is : false
moz:webdriverClick value is : true
pageLoadStrategy value is : normal
Platform is : WINDOWS
platformName value is : WINDOWS
platformVersion value is : 6.2
rotatable value is : false
setWindowRect value is : true
strictFileInteractability value is : false
timeouts values are : {implicit=0, pageLoad=300000, script=30000}
unhandledPromptBehavior value is : dismiss and notify
您可以在WebDriver的部分中找到支持的功能列表
W3C建议
听起来您需要的是如何向网格配置中添加自定义功能。这是可能的,但需要几个步骤
首先,您需要构建一个功能匹配器。matcher将是自己的项目,将Selenium服务器和Selenium Java库作为依赖项导入。您需要一个扩展org.openqa.grid.internal.utils.DefaultCapabilityMatcher
的类,并使用自己的逻辑覆盖matches()
方法,以确定节点是否具有所需的功能。完成后,您将构建此项目并生成一个jar文件
其次,您需要将新的matcher连接到网格中心。我将matcher jar存储在与selenium服务器独立jar相同的目录中,并修改我的正常启动命令以适应matcher
java -cp <custom-matcher>-1.0.0.jar;selenium-server-standalone-3.141.59.jar org.openqa.grid.selenium.GridLauncher -role hub -hubConfig hubConfig.json
第三,您需要配置节点以接受新功能。如果您使用JSON来配置您的节点,那么只需为您的功能添加一行代码即可:
"capabilityName": "foo"
差不多就是这样。还值得注意的是,DesiredCapabilities
确实有一个名为applicationName
的功能,该功能保留为用户可定义的值。根据您的特定用例,您可能能够利用此功能来代替添加新功能
我在Github上发现了一个很好的例子,当时我自己也在学习这个过程。这是一个基本的设置,但它很好地说明了上述步骤。它应该为您自己的实现提供一个很好的起点。听起来您想要的是如何向网格配置中添加自定义功能。这是可能的,但需要几个步骤
首先,您需要构建一个功能匹配器。matcher将是自己的项目,将Selenium服务器和Selenium Java库作为依赖项导入。您需要一个扩展org.openqa.grid.internal.utils.DefaultCapabilityMatcher
的类,并使用自己的逻辑覆盖matches()
方法,以确定节点是否具有所需的功能。完成后,您将构建此项目并生成一个jar文件
其次,您需要将新的matcher连接到网格中心。我将matcher jar存储在与selenium服务器独立jar相同的目录中,并修改我的正常启动命令以适应matcher
java -cp <custom-matcher>-1.0.0.jar;selenium-server-standalone-3.141.59.jar org.openqa.grid.selenium.GridLauncher -role hub -hubConfig hubConfig.json
第三,您需要配置节点以接受新功能。如果您使用JSON来配置您的节点,那么只需为您的功能添加一行代码即可:
"capabilityName": "foo"
差不多就是这样。还值得注意的是,DesiredCapabilities
确实有一个名为applicationName
的功能,该功能保留为用户可定义的值。根据您的特定用例,您可能能够利用此功能来代替添加新功能
我在Github上发现了一个很好的例子,当时我自己也在学习这个过程。这是一个基本的设置,但它很好地说明了上述步骤。它应该为您自己的实现提供一个很好的起点。这可能有助于理解这些功能。如果远程端不受支持,它将不会返回值。@RahulL yes correct,如果我使用.getCapability(“browserName”)
platformName
等,它将返回一个值,但它仍然是selenium中可用的默认值。我使用了付费测试平台(基于selenium和appium的平台),对于报告名称,我只能通过添加dc.setCapability(“testName”、“Login”)
方法来设置,并且我可以使用方法获取testName
的值