#java #selenium #safari
#java #selenium #safari
Вопрос:
Итак, я тестирую этот веб-сайт, и при запуске моих автоматических тестов в Safari драйвер создает экземпляры без проблем, базовый URL, который я дал коду для запуска, отображается, но когда я пытаюсь щелкнуть что-либо, ссылку, кнопку или что-либо еще, браузер просто стоит там, выглядя совершенно сбитым с толку.
У меня нет этой проблемы в Chrome, Firefox или Opera, только в Safari.
Когда код достигает метода .click (), он просто останавливается и больше ничего не делает.
Кто-нибудь может мне помочь с этим?
Как я могу решить эту проблему Safari с щелчком по элементам?
@Test
public void NEmptyEmail()
{
RegisterPage register = new RegisterPage(driver);
register.registerPageLink().click();
register.email().sendKeys("");
register.submit().click();
driver.findElement(By.xpath("//*[@id="root"]/main/div/section[1]/div/div/div/div/div/form/div[1]/div/div[1]/div/label[2]")).isDisplayed();
}
Трассировка стека ниже:
org.openqa.selenium.WebDriverException:
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'Andreis-iMac.local', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.14.3', java.version: '11.0.2'
Driver info: org.openqa.selenium.safari.SafariDriver
Capabilities {acceptInsecureCerts: false, browserName: Safari, browserVersion: 12.0.3, javascriptEnabled: true, platform: MAC, platformName: MAC, setWindowRect: true}
Session ID: 46FF6974-517C-448F-AD58-16F01177B898
*** Element info: {Using=xpath, value=//*[@id="root"]/main/div/section[1]/div/div/div/div/div/form/div[1]/div/div[1]/div/div/input}
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:323)
at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:428)
at org.openqa.selenium.By$ByXPath.findElement(By.java:353)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:315)
at pageObjects.RegisterPage.email(RegisterPage.java:38)
at RegisterPageTests.NEmptyEmail(RegisterPageTests.java:48)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:648)
at org.testng.TestRunner.run(TestRunner.java:505)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
at org.testng.SuiteRunner.run(SuiteRunner.java:364)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
at org.testng.TestNG.runSuites(TestNG.java:1049)
at org.testng.TestNG.run(TestNG.java:1017)
at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:73)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)
Комментарии:
1. Что именно вы имеете в виду, когда браузер просто стоит там, выглядя совершенно сбитым с толку ?
2. Он достигает URL-адреса и ничего не делает, никаких щелчков по данному элементу, на который он должен щелкнуть. Затем он просто закрывается и завершает тест с ошибкой, хотя он не должен этого делать. В Chrome, Opera или Firefox у меня нет этой проблемы. Тесты выполняются нормально и проходят там, где они должны проходить, и завершаются неудачей там, где они должны завершаться неудачей.
3. можете ли вы поделиться URL-адресом или предпочли бы этого не делать?
4. если бы это не было связано с компанией, в которой я работаю, я был бы рад поделиться. Извините : ( Но, поверьте мне, когда я говорю, проблема не в веб-сайте, над которым я работаю. Не реализовано никаких специальных функций, таких как iFrames или еще что-то
Ответ №1:
С помощью stacktrace нет проблем с щелчком.
at pageObjects.RegisterPage.email(RegisterPage.java:38)
говорит, что
register.email().sendKeys("");
вызывает org.openqa.selenium.WebDriverException
.
После загрузки страницы входа курсор находится в поле ввода «электронная почта» (попробуйте вручную загрузить страницу в разных браузерах)? Если нет, это должно сработать:
@Test
public void NEmptyEmail()
{
RegisterPage register = new RegisterPage(driver);
register.registerPageLink().click();
// click to the input field before sending keys
register.email().click();
register.email().sendKeys("");
register.submit().click();
driver.findElement(By.xpath("//*[@id="root"]/main/div/section[1]/div/div/div/div/div/form/div[1]/div/div[1]/div/label[2]")).isDisplayed();
}
Комментарии:
1. Спасибо за ответ, если бы не вы, я бы не нашел правильного способа проверить мою форму входа. Спасибо 🙂
Ответ №2:
После дальнейшего изучения, благодаря приведенному выше ответу, который помог мне увидеть проблему, связанную с Safari, объясненную в вопросе, я обнаружил, что Safari не понимает, когда вы пытаетесь .sendkeys(«») с пустой строкой, таким образом, проваливая тест;
Когда я пытаюсь .sendkeys («проверить») с некоторым текстом, браузер распознает ввод, а затем выполняет его вместе с кодом.
В любом случае, в моем случае и в моем контексте выше, я обнаружил, что для меня излишне отправлять пустую строку, потому что я работал над проверками формы входа.
Идея заключалась в том, что мне не нужно было отправлять пустую строку, мне нужно было только нажать кнопку входа, чтобы поле ввода было просто пустым.
Комментарии:
1. Да. Я сталкивался с более похожими проблемами, когда начинал с selenium, java, скриптингом… В любом случае, даже небольшой прогресс — это прогресс, и мы продолжаем идти вперед и ищем новые вызовы.