2013-07-18 2 views
0

У меня есть динамическое веб-приложение, созданное с помощью WebObjects. Существует ссылка, которую пытается найти мой тестовый код. Я делаю getPageSource() прямо перед тем, как найти его, и это ниже.Selenium находит тег, но click() не действует?

Я нашел тег успешно. Затем я нажимаю на него. Ничего не произошло. Тег, который я ищу на следующей странице, не найден.

Итак, как насчет тега, он может не реагировать на щелчок? К нему нет js. Он находится внутри пролета и окружает изображение, но это все.

Когда тестовый код завершает выполнение, я могу нажать на ссылку вручную, и я вижу следующую страницу. Так что же? Есть идеи?

[java] [1374173126242]: Going to Schedule page 
[java] [1374173126260]: 
[java] <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
[java] <html xmlns="http://www.w3.org/1999/xhtml"><head> 
[java]  <meta content="text/html; charset=utf-8" http-equiv="content-type" /> 
[java]  <meta content="COM" name="keywords" /> 
[java]  <title>APP!</title> 
[java]  <link href="/cgi-bin/WebObjects/APP.woa/_wr_/wodata=/Users/ME/Projects/APP/WebServerResources/APP/login.css" type="text/css" rel="stylesheet" /> 
[java] 
[java]  <link href="/cgi-bin/WebObjects/APP.woa/_wr_/wodata=/Users/ME/Projects/APP/WebServerResources/APP/APP.css" type="text/css" rel="stylesheet" /> 
[java] 
[java] </head> 
[java] <body> 
[java]  
[java]  (some bits removed . . .) 
[java]  <div id="landing_page_main" class="welcomeBox"> 
[java]  <div class="main_cont"> 
[java]   <div class="logo"><img src="/cgi-bin/WebObjects/APP.woa/_wr_/wodata=/Users/ME/Projects/APP/WebServerResources/APP/APP-live.png" alt="APP LIVE" /></div> 
[java]   <div class="table"> 
[java]   <table width="100%" cellspacing="0" cellpadding="0" border="0"> 
[java]    <tbody><tr> 
[java]    <td valign="middle" align="center"> 
[java]     <span title="Access My Schedule"><a name="19" class="access_my_schedule_link" href="/cgi-bin/WebObjects/APP.woa/wo/Tbrd5n8SsAGIL22d7hkPCM/2.19"><img width="74" border="0" height="64" src="/cgi-bin/WebObjects/APP.woa/_wr_/wodata=/Users/ME/Projects/APP/WebServerResources/APP/arrowRight.png" ismap="ismap" /></a></span> 
[java]    </td> 
[java]    </tr> 
[java]   </tbody></table> 
[java]   </div> 
[java]  </div> 
[java]  </div> 
[java] 
[java] </body></html> 
[java] [1374173126320]: found element: 
[java]  [[FirefoxDriver: firefox on MAC (7ac7e5e2-d4e2-334b-9d99-2e6ddb7b7439)] -> class name: access_my_schedule_link] 
[java] [1374173126332]: element enabled? true 
[java] [1374173126342]: element selected? false 
[java] [1374173126362]: element displayed? true 
[java] [1374173126389]: element location: (620, 265) 
[java] [1374173126404]: element tagName: a 
[java] [1374173126431]: element text: 
[java] Exception in thread "main" org.openqa.selenium.TimeoutException: Timed out after 10 seconds waiting for [email protected] 
[java] Build info: version: '2.33.0', revision: '4e90c97', time: '2013-05-22 15:33:32' 
[java] System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.6.8', java.version: '1.6.0_51' 
[java] Driver info: driver.version: APPLiveDriver 
[java]  at org.openqa.selenium.support.ui.FluentWait.timeoutException(FluentWait.java:259) 
[java]  at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:228) 
[java]  at APPLiveDriver.scheduleAndBack(Unknown Source) 
[java]  at APPLiveDriver.main(Unknown Source) 
[java] Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"class name","selector":"breadcrumb_home_link"} 
[java] Command duration or timeout: 9 milliseconds 
[java] For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html 
[java] Build info: version: '2.33.0', revision: '4e90c97', time: '2013-05-22 15:33:32' 
[java] System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.6.8', java.version: '1.6.0_51' 
[java] Session ID: 7ac7e5e2-d4e2-334b-9d99-2e6ddb7b7439 
[java] Driver info: org.openqa.selenium.firefox.FirefoxDriver 
[java] Capabilities [{platform=MAC, acceptSslCerts=true, javascriptEnabled=true, browserName=firefox, rotatable=false, locationContextEnabled=true, version=21.0, cssSelectorsEnabled=true, databaseEnabled=true, handlesAlerts=true, browserConnectionEnabled=true, nativeEvents=false, webStorageEnabled=true, applicationCacheEnabled=true, takesScreenshot=true}] 
[java]  at sun.reflect.GeneratedConstructorAccessor14.newInstance(Unknown Source) 
[java]  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
[java]  at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
[java]  at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:191) 
[java]  at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145) 
[java]  at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554) 
[java]  at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:307) 
[java]  at org.openqa.selenium.remote.RemoteWebDriver.findElementByClassName(RemoteWebDriver.java:388) 
[java]  at org.openqa.selenium.By$ByClassName.findElement(By.java:371) 
[java]  at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:299) 
[java]  at APPLiveDriver$4.apply(Unknown Source) 
[java]  at APPLiveDriver$4.apply(Unknown Source) 
[java]  at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:208) 
[java]  ... 2 more 
[java] Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: Unable to locate element: {"method":"class name","selector":"breadcrumb_home_link"} 
[java] Build info: version: '2.33.0', revision: '4e90c97', time: '2013-05-22 15:33:32' 
[java] System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.6.8', java.version: '1.6.0_51' 
[java] Driver info: driver.version: unknown 
[java]  at <anonymous class>.FirefoxDriver.prototype.findElementInternal_(file:///var/folders/oZ/oZFKAiJ8FC80oMT1b--WME+++TQ/-Tmp-/anonymous4201752404452189319webdriver-profile/extensions/[email protected]/components/driver_component.js:8444) 
[java]  at <anonymous class>.FirefoxDriver.prototype.findElement(file:///var/folders/oZ/oZFKAiJ8FC80oMT1b--WME+++TQ/-Tmp-/anonymous4201752404452189319webdriver-profile/extensions/[email protected]/components/driver_component.js:8453) 
[java]  at <anonymous class>.DelayedCommand.prototype.executeInternal_/h(file:///var/folders/oZ/oZFKAiJ8FC80oMT1b--WME+++TQ/-Tmp-/anonymous4201752404452189319webdriver-profile/extensions/[email protected]/components/command_processor.js:10456) 
[java]  at <anonymous class>.DelayedCommand.prototype.executeInternal_(file:///var/folders/oZ/oZFKAiJ8FC80oMT1b--WME+++TQ/-Tmp-/anonymous4201752404452189319webdriver-profile/extensions/[email protected]/components/command_processor.js:10461) 
[java]  at <anonymous class>.DelayedCommand.prototype.execute/<(file:///var/folders/oZ/oZFKAiJ8FC80oMT1b--WME+++TQ/-Tmp-/anonymous4201752404452189319webdriver-profile/extensions/[email protected]/components/command_processor.js:10401) 
+0

Возможно, намек. Если я подожду секунду и вызову click() в том же экземпляре WebElement, я получаю org.openqa.selenium.StaleElementReferenceException. Но я могу успешно найти элемент (его нет на целевой странице) и нажмите(), и все еще нет эффекта. Hm .... –

ответ

0

Кажется, Selenium webDriver не смог найти элемент, попробуйте выполнить поиск по xpath. Также было бы неплохо, если бы вы предоставили html-источник (его можно скопировать из firebug). Обновление: благодаря ответу. У вас есть имя класса «breadcrump_home_link» в коде, но другое имя класса в тесте: «access_my_schedule_link».

+0

getPageSource() получил источник страницы. Таким образом, это страница страницы страницы с последней загрузкой. Это выше. –

+0

См. Бит, который включает в себя:

+0

Да, вы правы. Я нахожусь на странице, которая имеет ссылку с классом «access_my_schedule_link». Я нахожу эту ссылку и звоню ((). Если я перейду на следующую страницу, я смогу найти вещь с классом «breadcrumb_home_link». Поскольку click() не работает, «breadcrumb_home_link» не найден. –

0

Ну, это ответ. Я думаю, что это может стоить подать в качестве ошибки с людьми селена.

Я разделил HTML-код, который WebObjects создавал для меня. Я использовал WOActiveImage. Если я использую WOHyperlink вокруг WOImage, я получил почти тот же URL-адрес, и селен смог перейти по ссылке.

Разница заключалась в следующем:

<a name="19" class="access_my_schedule_link" 
    href="/cgi-bin/..."> 
<img width="74" border="0" height="64" src="/cgi-bin/..." ismap="ismap" /> 
</a> 

стали:

<a name="19" class="access_my_schedule_link" 
    href="/cgi-bin/..."> 
<img width="74" border="0" height="64" src="/cgi-bin/..." /> 
</a> 

По-видимому, используя атрибут ISMAP на тег токсичен для Selenium. Очень странно.

Ну, я доволен.

+0

См. Http://code.google.com/p/selenium/issues/detail?id=5956 –

0

Когда вы получаете исключение из метода .findElement, все, что вам нужно сделать, это обработать исключение изящно, и если вы сделаете все это в цикле, вы можете повторить столько раз, сколько хотите, без сбоя теста. Если вы посмотрите на метод .ignoring класса FluentWait, это пример.

+0

Удаление параметра ismap = "ismap" из тега img внутри тега a приводит к тому, что селен правильно следит за ссылкой. Почему это так? Как поймать исключение и попробовать снова помочь? –