Skip to content

Commit

Permalink
Merge branch 'trunk' into trunk
Browse files Browse the repository at this point in the history
  • Loading branch information
VietND96 authored Jul 18, 2024
2 parents 1540761 + f3724e6 commit ddfa76a
Show file tree
Hide file tree
Showing 11 changed files with 124 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -878,11 +878,7 @@ protected Node getNodeFromURI(URI uri) {
model.getSnapshot().stream()
.filter(node -> node.getExternalUri().equals(uri))
.findFirst();
if (nodeStatus.isPresent()) {
return nodes.get(nodeStatus.get().getNodeId());
} else {
return null;
}
return nodeStatus.map(status -> nodes.get(status.getNodeId())).orElse(null);
} finally {
readLock.unlock();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -207,8 +207,8 @@ protected List<Device> getDevicesMapping() {
config.getAll(DOCKER_SECTION, "devices").orElseGet(Collections::emptyList);

List<Device> deviceMapping = new ArrayList<>();
for (int i = 0; i < devices.size(); i++) {
String deviceMappingDefined = devices.get(i).trim();
for (String device : devices) {
String deviceMappingDefined = device.trim();
Matcher matcher =
linuxDeviceMappingWithDefaultPermissionsPattern.matcher(deviceMappingDefined);

Expand Down
16 changes: 13 additions & 3 deletions java/src/org/openqa/selenium/interactions/Actions.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,15 @@ public class Actions {
private PointerInput activePointer;
private KeyInput activeKeyboard;
private WheelInput activeWheel;
private Duration actionDuration;

public Actions(WebDriver driver) {
this(driver, Duration.ofMillis(250));
}

public Actions(WebDriver driver, Duration duration) {
this.driver = Require.nonNull("Driver", driver);
this.actionDuration = duration;
}

/**
Expand Down Expand Up @@ -215,7 +221,7 @@ public Actions release(WebElement target) {
*/
public Actions scrollToElement(WebElement element) {
WheelInput.ScrollOrigin scrollOrigin = WheelInput.ScrollOrigin.fromElement(element);
return tick(getActiveWheel().createScroll(0, 0, 0, 0, Duration.ofMillis(250), scrollOrigin));
return tick(getActiveWheel().createScroll(0, 0, 0, 0, this.actionDuration, scrollOrigin));
}

/**
Expand All @@ -229,7 +235,7 @@ public Actions scrollToElement(WebElement element) {
public Actions scrollByAmount(int deltaX, int deltaY) {
WheelInput.ScrollOrigin scrollOrigin = WheelInput.ScrollOrigin.fromViewport();
return tick(
getActiveWheel().createScroll(0, 0, deltaX, deltaY, Duration.ofMillis(250), scrollOrigin));
getActiveWheel().createScroll(0, 0, deltaX, deltaY, this.actionDuration, scrollOrigin));
}

/**
Expand All @@ -249,7 +255,7 @@ public Actions scrollFromOrigin(WheelInput.ScrollOrigin scrollOrigin, int deltaX
int x = scrollOrigin.getxOffset();
int y = scrollOrigin.getyOffset();
return tick(
getActiveWheel().createScroll(x, y, deltaX, deltaY, Duration.ofMillis(250), scrollOrigin));
getActiveWheel().createScroll(x, y, deltaX, deltaY, this.actionDuration, scrollOrigin));
}

/**
Expand Down Expand Up @@ -548,6 +554,10 @@ public WheelInput getActiveWheel() {
return this.activeWheel;
}

public Duration getActionDuration() {
return this.actionDuration;
}

/**
* Generates a composite action containing all actions so far, ready to be performed (and resets
* the internal builder state, so subsequent calls to this method will contain fresh sequences).
Expand Down
8 changes: 2 additions & 6 deletions java/src/org/openqa/selenium/net/Urls.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@

import java.io.IOException;
import java.io.UncheckedIOException;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.regex.Pattern;
import org.openqa.selenium.internal.Require;

Expand All @@ -42,11 +42,7 @@ private Urls() {
* @see URLEncoder#encode(java.lang.String, java.lang.String)
*/
public static String urlEncode(String value) {
try {
return URLEncoder.encode(value, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new UncheckedIOException(e);
}
return URLEncoder.encode(value, StandardCharsets.UTF_8);
}

public static URL fromUri(URI uri) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,6 @@ private static String read(Reader reader, Charset charSet, char delimiter, Atomi
builder.append(c);
}

return URLDecoder.decode(builder.toString(), charSet.toString());
return URLDecoder.decode(builder.toString(), charSet);
}
}
7 changes: 1 addition & 6 deletions java/test/org/openqa/selenium/ReferrerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
import com.google.common.net.HostAndPort;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URLEncoder;
import java.nio.file.Files;
Expand Down Expand Up @@ -169,11 +168,7 @@ void basicHistoryNavigationWithADirectProxy() {
}

private static String encode(String url) {
try {
return URLEncoder.encode(url, UTF_8.name());
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("UTF-8 should always be supported!", e);
}
return URLEncoder.encode(url, UTF_8);
}

private void performNavigation(WebDriver driver, String firstUrl) {
Expand Down
34 changes: 15 additions & 19 deletions java/test/org/openqa/selenium/docker/v1_41/ListImagesTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
import static org.openqa.selenium.json.Json.MAP_TYPE;
import static org.openqa.selenium.remote.http.Contents.utf8String;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.Set;
import org.junit.jupiter.api.Test;
Expand All @@ -41,26 +41,22 @@ void shouldReturnImageIfTagIsPresent() {
HttpHandler handler =
req -> {
String filters = req.getQueryParameter("filters");
try {
String decoded = URLDecoder.decode(filters, "UTF-8");
Map<String, Object> raw = new Json().toType(decoded, MAP_TYPE);
String decoded = URLDecoder.decode(filters, StandardCharsets.UTF_8);
Map<String, Object> raw = new Json().toType(decoded, MAP_TYPE);

Map<?, ?> rawRef = (Map<?, ?>) raw.get("reference");
assertThat(rawRef.get("selenium/standalone-firefox:latest")).isEqualTo(true);
Map<?, ?> rawRef = (Map<?, ?>) raw.get("reference");
assertThat(rawRef.get("selenium/standalone-firefox:latest")).isEqualTo(true);

return new HttpResponse()
.addHeader("Content-Type", "application/json")
.setContent(
utf8String(
"[{\"Containers\":-1,\"Created\":1581716253,"
+ "\"Id\":\"sha256:bc24341497a00a3afbf04c518cb4bf98834d933ae331d1c5d3cd6f52c079049e\","
+ "\"Labels\":{\"authors\":\"SeleniumHQ\"},\"ParentId\":\"\","
+ "\"RepoDigests\":null,"
+ "\"RepoTags\":[\"selenium/standalone-firefox:latest\"],"
+ "\"SharedSize\":-1,\"Size\":765131593,\"VirtualSize\":765131593}]"));
} catch (UnsupportedEncodingException ignore) {
return null;
}
return new HttpResponse()
.addHeader("Content-Type", "application/json")
.setContent(
utf8String(
"[{\"Containers\":-1,\"Created\":1581716253,"
+ "\"Id\":\"sha256:bc24341497a00a3afbf04c518cb4bf98834d933ae331d1c5d3cd6f52c079049e\","
+ "\"Labels\":{\"authors\":\"SeleniumHQ\"},\"ParentId\":\"\","
+ "\"RepoDigests\":null,"
+ "\"RepoTags\":[\"selenium/standalone-firefox:latest\"],"
+ "\"SharedSize\":-1,\"Size\":765131593,\"VirtualSize\":765131593}]"));
};

Reference reference = Reference.parse("selenium/standalone-firefox:latest");
Expand Down
7 changes: 1 addition & 6 deletions java/test/org/openqa/selenium/grid/MainTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
Expand All @@ -38,11 +37,7 @@ public void init() {
}

private PrintStream toPrintStream(ByteArrayOutputStream baos) {
try {
return new PrintStream(baos, true, StandardCharsets.UTF_8.name());
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return new PrintStream(baos, true, StandardCharsets.UTF_8);
}

@Test
Expand Down
82 changes: 82 additions & 0 deletions java/test/org/openqa/selenium/interactions/ActionDurationTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.

package org.openqa.selenium.interactions;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.time.Duration;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.testing.JupiterTestBase;

@Tag("UnitTests")
class ActionDurationTest extends JupiterTestBase {
@Test
void shouldScrollToElementWithCustomDuration() {
driver.get(
appServer.whereIs("scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html"));
WebElement iframe = driver.findElement(By.tagName("iframe"));

assertFalse(inViewport(iframe));

new Actions(driver, Duration.ofMillis(111)).scrollToElement(iframe).perform();

assertTrue(inViewport(iframe));
}

@Test
void shouldScrollFromViewportByGivenAmountWithCustomDuration() {
driver.get(
appServer.whereIs("scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html"));
WebElement footer = driver.findElement(By.tagName("footer"));
int deltaY = footer.getRect().y;

new Actions(driver, Duration.ofMillis(111)).scrollByAmount(0, deltaY).perform();

assertTrue(inViewport(footer));
}

@Test
void shouldBeDefaultActionDuration250ms() {
Actions actions = new Actions(driver);
assertEquals(Duration.ofMillis(250), actions.getActionDuration());
}

@Test
void shouldBeCustomDuration110ms() {
Actions actions = new Actions(driver, Duration.ofMillis(110));
assertEquals(Duration.ofMillis(110), actions.getActionDuration());
}

private boolean inViewport(WebElement element) {

String script =
"for(var e=arguments[0],f=e.offsetTop,t=e.offsetLeft,o=e.offsetWidth,n=e.offsetHeight;\n"
+ "e.offsetParent;)f+=(e=e.offsetParent).offsetTop,t+=e.offsetLeft;\n"
+ "return"
+ " f<window.pageYOffset+window.innerHeight&&t<window.pageXOffset+window.innerWidth&&f+n>\n"
+ "window.pageYOffset&&t+o>window.pageXOffset";

return (boolean) ((JavascriptExecutor) driver).executeScript(script, element);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ void noErrorNoCry() {

Response decoded = new W3CHttpResponseCodec().decode(response);

assertThat(decoded.getStatus().intValue()).isEqualTo(ErrorCodes.SUCCESS);
assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.SUCCESS);
assertThat(decoded.getState()).isEqualTo("success");
assertThat(decoded.getValue()).isEqualTo("cheese");
}
Expand Down
15 changes: 5 additions & 10 deletions java/test/org/openqa/selenium/remote/http/FormEncodedDataTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@

import com.google.common.collect.ImmutableMap;
import com.google.common.net.MediaType;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
Expand Down Expand Up @@ -133,15 +132,11 @@ private HttpRequest createRequest(String key, String value, String... others) {
if (!isFirst) {
content.append("&");
}
try {
content.append(URLEncoder.encode(iterator.next(), UTF_8.toString()));

String next = iterator.next();
if (next != null) {
content.append("=").append(URLEncoder.encode(next, UTF_8.toString()));
}
} catch (UnsupportedEncodingException e) {
fail(e.getMessage());
content.append(URLEncoder.encode(iterator.next(), UTF_8));

String next = iterator.next();
if (next != null) {
content.append("=").append(URLEncoder.encode(next, UTF_8));
}
if (isFirst) {
isFirst = false;
Expand Down

0 comments on commit ddfa76a

Please sign in to comment.