Изменить пароль Тестовые случаи Selenium - Debug

Ниже приведен тест, который я написал для смены пароля.

@Тестовое задание

    public void changePassword() throws IOException, InterruptedException {
        Login();
        driver.findElement(By.xpath(".//*[@id='wrapper']/div[1]/div[2]/div/div/ul/li[3]/a")).click();
        driver.findElement(By.xpath(".//*[@id='wrapper']/div[1]/div[2]/div/div/ul/li[3]/ul/li[3]/a")).click();
        driver.findElement(By.xpath(".//*[@id='change-password']/div[1]/div/input")).sendKeys("abcd");
        driver.findElement(By.xpath(".//*[@id='Users_password']")).sendKeys("xyz123456");
        driver.findElement(By.xpath(".//*[@id='repassword']")).sendKeys("xyz123456");
        driver.findElement(By.xpath(".//*[@id='change-password']/div[4]/div/input")).click();
    }
}

Ниже приведена ошибка, которую я получаю, я проверил правильность Xpath, все еще получаю эту ошибку -

org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":".//*[@id='change-password']/div[1]/div/input"}
Command duration or timeout: 2.81 seconds
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:215)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:671)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:410)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:509)
    at org.openqa.selenium.By$ByXPath.findElement(By.java:361)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:402)
    at pages.ChangePass.changePassword(ChangePass.java:16)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:661)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    at org.testng.TestRunner.privateRun(TestRunner.java:744)
    at org.testng.TestRunner.run(TestRunner.java:602)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
    at org.testng.SuiteRunner.run(SuiteRunner.java:289)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
    at org.testng.TestNG.runSuites(TestNG.java:1144)
    at org.testng.TestNG.run(TestNG.java:1115)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)
Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":".//*[@id='change-password']/div[1]/div/input"}
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'DESKTOP-1AKPPH7', ip: '192.168.56.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_111'
Driver info: driver.version: unknown
    at <anonymous class>.FirefoxDriver.prototype.findElementInternal_(file:///C:/Users/Avinash/AppData/Local/Temp/anonymous9034314523683234934webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:11390)
    at <anonymous class>.FirefoxDriver.prototype.findElement(file:///C:/Users/Avinash/AppData/Local/Temp/anonymous9034314523683234934webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:11399)
    at <anonymous class>.DelayedCommand.prototype.executeInternal_/k(file:///C:/Users/Avinash/AppData/Local/Temp/anonymous9034314523683234934webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12879)
    at <anonymous class>.DelayedCommand.prototype.executeInternal_(file:///C:/Users/Avinash/AppData/Local/Temp/anonymous9034314523683234934webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12884)
    at <anonymous class>.DelayedCommand.prototype.execute/<(file:///C:/Users/Avinash/AppData/Local/Temp/anonymous9034314523683234934webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12826)

Мои вопросы - 1. Что не так в приведенном выше коде, когда я выполняю это, я перехожу на экран смены пароля. 2. Является ли вышеуказанный способ лучшим способом проверить функциональность смены пароля? 3. Есть ли еще тестовые сценарии, которые вы можете рекомендовать мне включить и как?

2 ответа

Решение

Вот ответы на ваш вопрос:

  1. What is wrong in above code:

xpaths Вы построили, например, .//*[@id='wrapper']/div[1]/div[2]/div/div/ul/li[3]/a, .//*[@id='wrapper']/div[1]/div[2]/div/div/ul/li[3]/ul/li[3]/a а также .//*[@id='change-password']/div[1]/div/input абсолютны xpaths который содержит index, Следовательно, они brittle а также vulnerable, Вы можете рассмотреть возможность создания уникальных logical xpath,

  1. Is above way the best way to test change password functionality?:

Я не думаю, что есть лучшие практики в этом. Потому что это действительно зависит от того, что вы пытаетесь решить. Но определенно перед использованием sendKeys("abcd") метод для текстового поля, вы должны рассмотреть возможность использования clear() Метод первый.

  1. Когда есть NoSuchElementException: Unable to locate element мы должны рассмотреть возможность ExplicitWait с надлежащим ExpectedConditions так Selenium может найти элемент по крайней мере.

Дайте мне знать, если это отвечает на ваш вопрос.

Сначала попробуйте добавить фрагмент HTML, чтобы локаторы могли быть написаны гораздо более избыточным способом.

Во-вторых, используйте некоторый механизм ожидания для загрузки страницы должным образом. В вашем случае Вы нажимаете на ссылку и пытаетесь ввести данные в поле ввода пароля для смены, исключение, которое вы получаете из-за того, что страница загружена неправильно, и Selenium пытается ввести значение в поле для смены пароля.

Для простого решения вы можете использовать неявное ожидание, и оно будет работать

driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
Другие вопросы по тегам