From ee488d3e3f8a6c638f97667b533d4d2b066c6050 Mon Sep 17 00:00:00 2001 From: Aliaksandr Rasolka Date: Thu, 28 Dec 2017 14:04:42 +0300 Subject: [PATCH 1/4] Add ability to get UserAgent. Set User-Agent for HttpGet in DownloadFileWithHttpRequest. --- .../java/com/codeborne/selenide/Selenide.java | 23 ++++++--- .../impl/DownloadFileWithHttpRequest.java | 8 +-- src/test/java/integration/UserAgentTest.java | 51 +++++++++++++++++++ 3 files changed, 72 insertions(+), 10 deletions(-) create mode 100644 src/test/java/integration/UserAgentTest.java diff --git a/src/main/java/com/codeborne/selenide/Selenide.java b/src/main/java/com/codeborne/selenide/Selenide.java index c26d651e77..847301b315 100644 --- a/src/main/java/com/codeborne/selenide/Selenide.java +++ b/src/main/java/com/codeborne/selenide/Selenide.java @@ -142,7 +142,7 @@ public static PageObjectClass open(URL absoluteUrl, * Open a web page using Basic Auth credentials and create PageObject for it. * @return PageObject of given class */ - public static PageObjectClass open(String relativeOrAbsoluteUrl, + public static PageObjectClass open(String relativeOrAbsoluteUrl, String domain, String login, String password, Class pageObjectClassClass) { open(relativeOrAbsoluteUrl, domain, login, password); @@ -603,10 +603,10 @@ private static void checkDialogText(String expectedDialogText, String actualDial /** * Switch to window/tab/frame/parentFrame/innerFrame/alert. * Allows switching to window by title, index, name etc. - * + * * Similar to org.openqa.selenium.WebDriver#switchTo(), but all methods wait until frame/window/alert * appears if it's not visible yet (like other Selenide methods). - * + * * @return SelenideTargetLocator */ public static SelenideTargetLocator switchTo() { @@ -646,12 +646,12 @@ public static PageObjectClass page( /** * Create a org.openqa.selenium.support.ui.FluentWait instance with Selenide timeout/polling. - * - * Sample usage: + * + * Sample usage: * {@code * Wait().until(invisibilityOfElementLocated(By.id("magic-id"))); * } - * + * * @return instance of org.openqa.selenium.support.ui.FluentWait */ public static FluentWait Wait() { @@ -715,7 +715,7 @@ else if (errors instanceof Map) { } catch (WebDriverException | UnsupportedOperationException cannotExecuteJs) { log.warning(cannotExecuteJs.toString()); return emptyList(); - } + } } private static List errorsFromList(List errors) { @@ -822,6 +822,15 @@ public static void clearBrowserLocalStorage() { executeJavaScript("localStorage.clear();"); } + /** + * Get current user agent from browser session + * + * @return browser user agent + */ + public static String getUserAgent() { + return executeJavaScript("return navigator.userAgent;"); + } + private static List getLogEntries(String logType, Level logLevel) { try { return getWebDriver().manage().logs().get(logType).filter(logLevel); diff --git a/src/main/java/com/codeborne/selenide/impl/DownloadFileWithHttpRequest.java b/src/main/java/com/codeborne/selenide/impl/DownloadFileWithHttpRequest.java index d2b3668a5f..611e98ffce 100644 --- a/src/main/java/com/codeborne/selenide/impl/DownloadFileWithHttpRequest.java +++ b/src/main/java/com/codeborne/selenide/impl/DownloadFileWithHttpRequest.java @@ -38,15 +38,16 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import static com.codeborne.selenide.Selenide.getUserAgent; import static com.codeborne.selenide.impl.Describe.describe; import static org.apache.commons.io.FileUtils.copyInputStreamToFile; import static org.apache.http.client.protocol.HttpClientContext.COOKIE_STORE; public class DownloadFileWithHttpRequest { private static final Logger log = Logger.getLogger(DownloadFileWithHttpRequest.class.getName()); - + public static boolean ignoreSelfSignedCerts = true; - + public File download(WebElement element) throws IOException { String fileToDownloadLocation = element.getAttribute("href"); if (fileToDownloadLocation == null || fileToDownloadLocation.trim().isEmpty()) { @@ -83,7 +84,8 @@ protected HttpResponse executeHttpRequest(String fileToDownloadLocation) throws .setCookieSpec(CookieSpecs.STANDARD) .build() ); - + httpGet.setHeader("User-Agent", getUserAgent()); + HttpContext localContext = new BasicHttpContext(); localContext.setAttribute(COOKIE_STORE, mimicCookieState()); diff --git a/src/test/java/integration/UserAgentTest.java b/src/test/java/integration/UserAgentTest.java new file mode 100644 index 0000000000..a48cb54689 --- /dev/null +++ b/src/test/java/integration/UserAgentTest.java @@ -0,0 +1,51 @@ +package integration; + +import com.codeborne.selenide.Configuration; +import org.hamcrest.Description; +import org.hamcrest.Matcher; +import org.hamcrest.TypeSafeMatcher; +import org.junit.Test; + +import static com.codeborne.selenide.Selenide.getUserAgent; +import static com.codeborne.selenide.Selenide.open; +import static com.codeborne.selenide.WebDriverRunner.isHtmlUnit; +import static integration.UserAgentTest.CaseInsensitiveSubstringMatcher.containsIgnoringCase; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.text.IsEmptyString.isEmptyOrNullString; +import static org.junit.Assert.assertThat; +import static org.junit.Assume.assumeFalse; + +public class UserAgentTest extends IntegrationTest { + @Test + public void currentUserAgentTest() { + assumeFalse(isHtmlUnit()); + + open("/start_page.html"); + String userAgent = getUserAgent(); + + assertThat(userAgent, not(isEmptyOrNullString())); + assertThat(userAgent, containsIgnoringCase(Configuration.browser)); + } + + public static class CaseInsensitiveSubstringMatcher extends TypeSafeMatcher { + private final String subString; + + private CaseInsensitiveSubstringMatcher(final String subString) { + this.subString = subString; + } + + static Matcher containsIgnoringCase(final String subString) { + return new CaseInsensitiveSubstringMatcher(subString); + } + + @Override + protected boolean matchesSafely(final String actualString) { + return actualString.toLowerCase().contains(this.subString.toLowerCase()); + } + + @Override + public void describeTo(final Description description) { + description.appendText("containing substring \"" + this.subString + "\""); + } + } +} From 0c2e62dfaf963f857caef65fdd58e1772813d819 Mon Sep 17 00:00:00 2001 From: Aliaksandr Rasolka Date: Thu, 28 Dec 2017 17:02:37 +0300 Subject: [PATCH 2/4] Try to fix codecov patch by simplify assert. --- src/test/java/integration/UserAgentTest.java | 33 ++++---------------- 1 file changed, 6 insertions(+), 27 deletions(-) diff --git a/src/test/java/integration/UserAgentTest.java b/src/test/java/integration/UserAgentTest.java index a48cb54689..71e2baa0ad 100644 --- a/src/test/java/integration/UserAgentTest.java +++ b/src/test/java/integration/UserAgentTest.java @@ -1,51 +1,30 @@ package integration; import com.codeborne.selenide.Configuration; -import org.hamcrest.Description; -import org.hamcrest.Matcher; -import org.hamcrest.TypeSafeMatcher; +import org.apache.commons.lang3.StringUtils; import org.junit.Test; import static com.codeborne.selenide.Selenide.getUserAgent; import static com.codeborne.selenide.Selenide.open; import static com.codeborne.selenide.WebDriverRunner.isHtmlUnit; -import static integration.UserAgentTest.CaseInsensitiveSubstringMatcher.containsIgnoringCase; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.text.IsEmptyString.isEmptyOrNullString; import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; import static org.junit.Assume.assumeFalse; public class UserAgentTest extends IntegrationTest { @Test public void currentUserAgentTest() { + Configuration.browser = "chrome"; assumeFalse(isHtmlUnit()); open("/start_page.html"); String userAgent = getUserAgent(); + String browser = Configuration.browser; assertThat(userAgent, not(isEmptyOrNullString())); - assertThat(userAgent, containsIgnoringCase(Configuration.browser)); - } - - public static class CaseInsensitiveSubstringMatcher extends TypeSafeMatcher { - private final String subString; - - private CaseInsensitiveSubstringMatcher(final String subString) { - this.subString = subString; - } - - static Matcher containsIgnoringCase(final String subString) { - return new CaseInsensitiveSubstringMatcher(subString); - } - - @Override - protected boolean matchesSafely(final String actualString) { - return actualString.toLowerCase().contains(this.subString.toLowerCase()); - } - - @Override - public void describeTo(final Description description) { - description.appendText("containing substring \"" + this.subString + "\""); - } + assertTrue(String.format("Current user agent [%s] should belong to '%s' browser", userAgent, browser), + StringUtils.containsIgnoreCase(userAgent, browser)); } } From d6b634499041662617a1752aafdc55e6bf07cddf Mon Sep 17 00:00:00 2001 From: Aliaksandr Rasolka Date: Thu, 28 Dec 2017 17:03:38 +0300 Subject: [PATCH 3/4] Remove direct driver set in test --- src/test/java/integration/UserAgentTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/integration/UserAgentTest.java b/src/test/java/integration/UserAgentTest.java index 71e2baa0ad..d084023d39 100644 --- a/src/test/java/integration/UserAgentTest.java +++ b/src/test/java/integration/UserAgentTest.java @@ -16,7 +16,6 @@ public class UserAgentTest extends IntegrationTest { @Test public void currentUserAgentTest() { - Configuration.browser = "chrome"; assumeFalse(isHtmlUnit()); open("/start_page.html"); From 607eef0650669278a16292bb5a8bb5a47aa08af3 Mon Sep 17 00:00:00 2001 From: Alexander Rosolko Date: Thu, 28 Dec 2017 21:39:47 +0300 Subject: [PATCH 4/4] Set indentation to 8 spaces instead of 6. --- src/test/java/integration/UserAgentTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/integration/UserAgentTest.java b/src/test/java/integration/UserAgentTest.java index d084023d39..68f9ca9676 100644 --- a/src/test/java/integration/UserAgentTest.java +++ b/src/test/java/integration/UserAgentTest.java @@ -24,6 +24,6 @@ public void currentUserAgentTest() { assertThat(userAgent, not(isEmptyOrNullString())); assertTrue(String.format("Current user agent [%s] should belong to '%s' browser", userAgent, browser), - StringUtils.containsIgnoreCase(userAgent, browser)); + StringUtils.containsIgnoreCase(userAgent, browser)); } }