我目前正在使用selenium 3.14.0库,其中不推荐使用org.openqa.selenium.remote.internal.ApacheHttpClient而没有其他信息.有谁知道应该使用哪个?该类已在下一版本3.141.59中删除.
我正在使用EdgeDriver Service,如下所示:
final int connectionTimeout = 2 * 60 * 1000;
final int socketTimeout = 10 * 60 * 1000; // 10 minute timeout
final ApacheHttpClient.Factory clientFactory = new ApacheHttpClient.Factory(
new HttpClientFactory(connectionTimeout, socketTimeout));
...
edgeDriverService = new EdgeDriverService.Builder()
.usingDriverExecutable(edgeDriver)
.usingAnyFreePort()
.build();
edgeDriverService.start();
HttpCommandExecutor executor = new HttpCommandExecutor(
new HashMap<>(), edgeDriverService.getUrl(), clientFactory);
WebDriver driver = new RemoteWebDriver(executor, new EdgeOptions());
Run Code Online (Sandbox Code Playgroud) 在我的 CI 机器(Windows 10)上,我运行 Gradle 测试。基本上在机器上,在测试任务之前执行 git pull 和 java 编译。
这个任务...
测试 --tests my.package.SomeTestClass
因此异常而失败...
00:00:32,989 INFO - Successfully started process 'Gradle Test Executor 1'
00:00:35,925 INFO - Error occurred during initialization of VM
00:00:35,927 INFO - Unable to allocate 16384KB bitmaps for parallel garbage collection for the requested 524288KB heap.
00:00:35,927 ERROR - Error: Could not create the Java Virtual Machine.
00:00:35,929 ERROR - Error: A fatal exception has occurred. Program will exit.
00:00:35,930 INFO -
00:00:35,930 ERROR …Run Code Online (Sandbox Code Playgroud) 我在使用appium java客户端时遇到了麻烦,因为似乎他们的项目做得很奇怪。
基本上,他们在项目中使用硒,这应该可以正常工作,但他们将硒中的一个软件包部分复制到了他们的项目中(org.openqa.selenium)中,并对内部的类进行了一些小的改动。基本上,他们向接口添加了泛型。现在,我们在不同库中的同一包中有重复的类,这当然会导致问题。
我创建了一个简单的Gradle项目来演示这一点。按照我的build.gradle:
plugins {
id 'java-library'
}
dependencies {
api 'io.appium:java-client:6.1.0'
}
repositories {
jcenter()
}
Run Code Online (Sandbox Code Playgroud)
还有我的课程Interactions.java:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class Interactions {
public static void touchWebElement(By by, WebDriver driver) {
touchWebElement(driver.findElement(by), driver);
}
public static void touchWebElement(WebElement element, WebDriver driver) {
// DO SOMETHING
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我编译该项目,则会出现以下错误:
The method touchWebElement(By, WebDriver) is ambiguous for the type Interactions Interactions.java line 8
Run Code Online (Sandbox Code Playgroud)
我认为这是模棱两可的,因为接口WebElement存在两次。
我该如何解决这个问题?
我们曾经有一些命令,如下所示:
gradlew test --tests *MyTest
Run Code Online (Sandbox Code Playgroud)
例如 MyTest 类在包中com.test.MyTest。当使用低于 5.0 的 Gradle 版本时,这工作得很好,但在升级到 5.1.1 后,我收到以下错误:
未找到给定的测试包括:[*MyTest](--tests filter)
我们已经替换了所有此类事件,因为我认为使用类的完整路径要好得多。但我想知道为什么这不再起作用了。
顺便说一句:我正在使用 TestNG,并且提到的类至少有一个用@Test.
我正在使用如下 URL 测试 HTTP Post 请求:
https://myurl.com/api/logs/%2Fvar%2Flog%2Fmessages?Api-Token=12332429nmdsafs
我禁用了 URL 编码,这里是我的发布请求:
RestAssured.given()
.contentType(JSON)
.log()
.all()
.urlEncodingEnabled(false)
.baseUri(RestAssured.baseURI)
.basePath(url)
.pathParam(LOG_PATH_PARAM_NAME, urlEncodeString(requireNonNull(logPath)))
.body(myJsonBody)
.when()
.post("/logs/{logPath}")
.then()
.statusCode(OK.getStatusCode());
Run Code Online (Sandbox Code Playgroud)
我也这样尝试过:
RestAssured.given()
.contentType(JSON)
.log()
.all()
.urlEncodingEnabled(false)
.baseUri(RestAssured.baseURI)
.basePath(url)
.body(myJsonBody)
.when()
.post("/logs/" + urlEncodeString(requireNonNull(logPath)))
.then()
.statusCode(OK.getStatusCode());
Run Code Online (Sandbox Code Playgroud)
这里是 urlEncodeString 方法:
private static String urlEncodeString(String value) throws UnsupportedEncodingException {
return URLEncoder.encode(value, StandardCharsets.UTF_8.name()).replaceAll("\\+", "%20");
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是我上面提到的 URL 被编码为以下内容:
https://myurl.com/api/logs/var/log/messages?Api-Token=12332429nmdsafs
有谁知道这里出了什么问题吗?或者知道解决方法吗?我已经尝试过双重逃脱了。
编辑:
我刚刚发现禁用 URL 编码仅适用于 URL 参数。