![Фотография](https://software-testing.ru/forum/uploads/profile/photo-thumb-19890.jpg?_r=0)
проблема с драйвером
#1
Отправлено 11 апреля 2012 - 14:09
Тестирую gmail.com.
подключаю FirefoxDriver. Захожу на главную страницу, ввожу логин и пароль, всё нормально проходт, но как только перехожу на страницу с почтой сталкиваюсь с проблемой.. не ищутся элементы. title страницы вроде бы выдает правильный... но элементы на странице не ищутся никакими методами.
пишет ошибку:
org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"//a[contains(text(),'Terms')]"}
Command duration or timeout: 16 milliseconds
For documentation on this error, please visit: http://seleniumhq.or...ch_element.html
Build info: version: '2.20.0', revision: '16008', time: '2012-02-28 15:00:40'
System info: os.name: 'Windows XP', os.arch: 'x86', os.version: '5.1', java.version: '1.6.0_26'
Driver info: driver.version: RemoteWebDriver
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:170)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:123)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:438)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:226)
at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:299)
at org.openqa.selenium.By$ByXPath.findElement(By.java:344)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:218)
at com.epam.gmail.pages.MailPage.getAccountBar(MailPage.java:22)
at com.epam.gmail.tests.SignIn.signIn(SignIn.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:758)
at org.testng.TestRunner.run(TestRunner.java:613)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:87)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1142)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1067)
at org.testng.TestNG.run(TestNG.java:979)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:109)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:202)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:173)
Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: Unable to locate element: {"method":"xpath","selector":"//a[contains(text(),'Terms')]"}
Build info: version: '2.20.0', revision: '16008', time: '2012-02-28 15:00:40'
System info: os.name: 'Windows XP', os.arch: 'x86', os.version: '5.1', java.version: '1.6.0_26'
Driver info: driver.version: unknown
не могу найти причину=((((
#2
Отправлено 11 апреля 2012 - 14:37
А у вас случаем не русская версия gmail открывается?Столкнулась с непонятной проблемой.
Тестирую gmail.com.
подключаю FirefoxDriver. Захожу на главную страницу, ввожу логин и пароль, всё нормально проходт, но как только перехожу на страницу с почтой сталкиваюсь с проблемой.. не ищутся элементы. title страницы вроде бы выдает правильный... но элементы на странице не ищутся никакими методами.
пишет ошибку:
#3
Отправлено 11 апреля 2012 - 14:38
А у вас случаем не русская версия gmail открывается?
нет. Английская.
#4
Отправлено 11 апреля 2012 - 14:39
#5
Отправлено 11 апреля 2012 - 14:55
не работает получается на странице с почтой, я думала может оно не успевает загрузиться.. но как это проверить?
#6
Отправлено 11 апреля 2012 - 15:00
Если есть подозрения на загрузку элементов страницы, попробуй искуственно добавить задержку и посмотри найдутся ли они после этого.Я проверила простоп ереход на другу страницу. на страницу регистрации например. там все находит... значит драйвер передается нормально.
не работает получается на странице с почтой, я думала может оно не успевает загрузиться.. но как это проверить?
#7
Отправлено 11 апреля 2012 - 15:13
#8
Отправлено 11 апреля 2012 - 15:14
Так что ищете нужный и переключайтесь в него, чтоб нажать)
driver.switchTo().frame( <номер> );Вообщем ищите сами)) потому что их там очень много)
Подсказка - это левая менюшка:
driver.switchTo().frame( 3 );
#9
Отправлено 11 апреля 2012 - 15:18
пробовала так..
все равно то же самое=(
#10
Отправлено 11 апреля 2012 - 15:30
Посмотрел что там gmail из себя представляет) Вообщем эта куча iframe))))))
Так что ищете нужный и переключайтесь в него, чтоб нажать)driver.switchTo().frame( <номер> );Вообщем ищите сами)) потому что их там очень много)
Подсказка - это левая менюшка:driver.switchTo().frame( 3 );
а как это определяется?... можно поподробнее?
я просто только начинаю работать c SeleniumWD
#11
Отправлено 11 апреля 2012 - 15:40
Вы выбрали неудачный пример для обучения. Возьмите что-нибудь попроще. Так как в данном конкретном случае очень сложно определять iframe на прямую(фактически вслепую определяете, перебором), так как их просто нет в исходном html (а он представляет из себя json запросы вроде бы)
Посмотрел что там gmail из себя представляет) Вообщем эта куча iframe))))))
Так что ищете нужный и переключайтесь в него, чтоб нажать)driver.switchTo().frame( <номер> );Вообщем ищите сами)) потому что их там очень много)
Подсказка - это левая менюшка:driver.switchTo().frame( 3 );
а как это определяется?... можно поподробнее?
я просто только начинаю работать c SeleniumWD
#12
Отправлено 11 апреля 2012 - 15:44
Вы выбрали неудачный пример для обучения. Возьмите что-нибудь попроще. Так как в данном конкретном случае очень сложно определять iframe на прямую(фактически вслепую определяете, перебором), так как их просто нет в исходном html (а он представляет из себя json запросы вроде бы)
Я бы с удовольствием, если бы я сама могла выбирать)))
#13
Отправлено 11 апреля 2012 - 15:48
Вообщем юзайте Chrome и его Developers Tools. Там нормально всё видно) Эт чёт FireBug не видит Iframe's)Я бы с удовольствием, если бы я сама могла выбирать)))
Нужный вам фремйм id="canvas_frame"
Для переключения делайте так:
driver.switchTo().frame( "canvas_frame" );
driver.get( "http://www.gmail.com" ); driver.manage().timeouts().implicitlyWait( 10, TimeUnit.SECONDS ); WebElement element = driver.findElement( By.id( "Email" ) ); element.sendKeys( "vadim.chadyuk@gmail.com" ); WebElement element2 = driver.findElement( By.id( "Passwd" ) ); element2.sendKeys( "12345612345" ); WebElement element3 = driver.findElement( By.id( "signIn" ) ); element3.click(); driver.switchTo().frame( "canvas_frame" ); WebElement element4 = driver.findElement( By.linkText( "Условия использования" ) ); element4.click(); Thread.sleep( 10000 ); // Check the title of the page System.out.println( "Page title is: " + driver.getTitle() );Update
Для возвращения ко всему документу:
driver.switchTo().defaultContent();
#14
Отправлено 12 апреля 2012 - 06:06
Вообщем юзайте Chrome и его Developers Tools. Там нормально всё видно) Эт чёт FireBug не видит Iframe's)
Я бы с удовольствием, если бы я сама могла выбирать)))
Нужный вам фремйм id="canvas_frame"
Для переключения делайте так:driver.switchTo().frame( "canvas_frame" );driver.get( "http://www.gmail.com" ); driver.manage().timeouts().implicitlyWait( 10, TimeUnit.SECONDS ); WebElement element = driver.findElement( By.id( "Email" ) ); element.sendKeys( "vadim.chadyuk@gmail.com" ); WebElement element2 = driver.findElement( By.id( "Passwd" ) ); element2.sendKeys( "Phoenixhp08081991CVS" ); WebElement element3 = driver.findElement( By.id( "signIn" ) ); element3.click(); driver.switchTo().frame( "canvas_frame" ); WebElement element4 = driver.findElement( By.linkText( "Условия использования" ) ); element4.click(); Thread.sleep( 10000 ); // Check the title of the page System.out.println( "Page title is: " + driver.getTitle() );Update
Для возвращения ко всему документу:driver.switchTo().defaultContent();
большое спасибо.
Попробую поюзать Chrome)
я вообще его больше люблю)))
#15
Отправлено 12 апреля 2012 - 06:42
driver.switchTo().frame("canvas_frame"); System.out.println(this.isElementPresent(By.linkText("Details")));
Error! Element is not present!
false
Вот...=((((
#16
Отправлено 12 апреля 2012 - 07:11
Ну так в начале вы искали Terms, а не Details . Скорее всего эта ссылка в другом фреймеdriver.switchTo().frame("canvas_frame"); System.out.println(this.isElementPresent(By.linkText("Details")));
Error! Element is not present!
false
Вот...=((((
#17
Отправлено 12 апреля 2012 - 07:19
Ну так в начале вы искали Terms, а не Details . Скорее всего эта ссылка в другом фрейме
driver.switchTo().frame("canvas_frame"); System.out.println(this.isElementPresent(By.linkText("Details")));
Error! Element is not present!
false
Вот...=((((
this.isElementPresent(By.partialLinkText("Terms"))
дает тот же результат.
И кстати там был тот же фрейм. Я проверяла.
Что я могу делать не так?=(((
#18
Отправлено 12 апреля 2012 - 08:21
driver.get( "http://www.gmail.com" ); driver.manage().timeouts().implicitlyWait( 10, TimeUnit.SECONDS ); WebElement element = driver.findElement( By.id( "Email" ) ); element.sendKeys( "vadim.chadyuk@gmail.com" ); WebElement element2 = driver.findElement( By.id( "Passwd" ) ); element2.sendKeys( "12345612345" ); WebElement element3 = driver.findElement( By.id( "signIn" ) ); element3.click(); driver.switchTo().frame( "canvas_frame" ); WebElement element4 = driver.findElement( By.linkText( "Условия использования" ) ); element4.click(); Thread.sleep( 10000 ); // Check the title of the page System.out.println( "Page title is: " + driver.getTitle() );Запустите мой тест. Он у вас работает????
Update там идёт довольно таки долгая загрузка. Так что нужно включить имплицитные ожидания(возможно в этом дело)
driver.manage().timeouts().implicitlyWait( 10, TimeUnit.SECONDS );
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных