【发布时间】:2019-12-12 15:25:20
【问题描述】:
我知道一些 selenium 功能可以通过一种方法获得,其中之一是这样的:
driver.getCapabilities().getBrowserName();
它返回浏览器名称的值。
但是如果它指的是一个可用的方法,如果我没有误解的话,这似乎与自定义能力有关,我的意思是这样的:
driver.getCapabilities().getCapability("something ?");
返回:值,如果未设置,则返回 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");获得
当前结果 Browser Name : chrome Test Name : null
预期结果 Browser Name : chrome Test Name : Login
提前感谢
【问题讨论】:
-
w3.org/TR/webdriver1/#capabilities 这可能有助于理解功能。如果不支持,远程端将不会返回值。
-
@RahulL 是正确的,如果我使用
.getCapability("browserName")platformName等,它将返回一个值,但它仍然是 selenium 中可用的默认值。我使用了付费测试平台(基于 selenium 和 appium 的平台),出于报告名称的目的,我只能通过添加dc.setCapability("testName"," Login ")方法来设置,我可以使用 @ 方法获取testName的值987654343@,即使我也可以使用.getCapability ("urlReport")方法获取报告url的值。所以我假设能力的名称可以根据需要自定义。 -
但其实并不像我想象的那么简单
-
酱实验室或浏览器堆栈有自己的远程服务器实现。他们不按原样使用 selenium 远程服务器。因此,服务器可以识别它们定义的功能。例子github.com/aerokube/selenoid用go语言实现
-
答案是肯定的。根据 W3C 协议 - '远程端还可能引入扩展功能,这些扩展功能是用于提供配置或满足其他供应商特定需求的额外功能' Capability dc.setCapability("testName", "Login") 它将以 Json 形式发送,但会被远程服务器忽略。当您请求它返回时,它不会发送任何内容。
标签: java selenium remotewebdriver desiredcapabilities