phpunit / seleniumRC / selenium2testcase元素在firefox中无法点击

时间:2015-12-17 00:31:11

标签: firefox phpunit selenium-rc

因此,我的公司要求我扩展自动化测试,以获得对其他浏览器的更多支持,即firefox和safari。

我的原始套件是在Chrome中设计的,在大多数情况下,它的工作非常完美,并立即暴露出错误 - 这确实是一个非常有用的工具。

我有大约80个需要页面导航并点击动态网址的测试用例。这对我来说很好,直到我需要点击的元素离开页面的测试用例7(及以上)。我怎么知道这是根本问题?因为如果我在click命令之前放置一个睡眠并在firefox执行期间手动滚动页面,实际上会发生点击,我会导航到正确的页面......

有人有解决方案吗?我可以发誓SeleniumTestCase2假设删除这个问题?我将在下面发布我的代码但老实说它适用于chrome驱动程序,但不适用于firefox。

Firefox v43.0和Selenium jar 4.48.2

19:44:56.100 INFO - Executing: [find element: By.id: ggk5y3m1])
19:44:56.106 INFO - Done: [find element: By.id: ggk5y3m1]
19:44:56.124 INFO - Executing: [find element: By.id: ggk5y3m1])
19:44:56.131 INFO - Done: [find element: By.id: ggk5y3m1]
19:44:56.142 INFO - Executing: [click: 6 [[FirefoxDriver: firefox on WINDOWS (a9
587de1-e110-454c-b6cb-581612242081)] -> id: ggk5y3m1]])
19:44:56.306 INFO - Done: [click: 6 [[FirefoxDriver: firefox on WINDOWS (a9587de
1-e110-454c-b6cb-581612242081)] -> id: ggk5y3m1]]
19:44:56.308 INFO - Executing: [find element: By.id: ff_frame442])
19:44:57.334 WARN - Exception thrown
org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":
"id","selector":"ff_frame442"}
Command duration or timeout: 23 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/
no_such_element.html
Build info: version: '2.48.2', revision: '41bccdd', time: '2015-10-09 19:59:12'
System info: host: 'testing', ip: '10.1.20.115', os.name: 'Windows 7', os.arch:
'x86', os.version: '6.1', java.version: '1.8.0_66'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{applicationCacheEnabled=true, rotatable=false, handlesAlerts=true
, databaseEnabled=true, version=43.0, platform=WINDOWS, nativeEvents=false, acce
ptSslCerts=true, webStorageEnabled=true, locationContextEnabled=true, browserNam
e=firefox, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=tru
e}]
Session ID: a9587de1-e110-454c-b6cb-581612242081
*** Element info: {Using=id, value=ff_frame442}
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Sou
rce)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.
java:206)
        at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHa
ndler.java:158)
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.ja
va:647)
        at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDrive
r.java:353)
        at org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebD
river.java:403)
        at org.openqa.selenium.By$ById.findElement(By.java:218)
        at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDrive
r.java:345)
        at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.openqa.selenium.support.events.EventFiringWebDriver$2.invoke(Even
tFiringWebDriver.java:102)
        at com.sun.proxy.$Proxy1.findElement(Unknown Source)
        at org.openqa.selenium.support.events.EventFiringWebDriver.findElement(E
ventFiringWebDriver.java:187)
        at org.openqa.selenium.remote.server.handler.FindElement.call(FindElemen
t.java:48)
        at org.openqa.selenium.remote.server.handler.FindElement.call(FindElemen
t.java:1)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at org.openqa.selenium.remote.server.DefaultSession$1.run(DefaultSession
.java:176)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element:
 {"method":"id","selector":"ff_frame442"}
For documentation on this error, please visit: http://seleniumhq.org/exceptions/
no_such_element.html
Build info: version: '2.48.2', revision: '41bccdd', time: '2015-10-09 19:59:12'
System info: host: 'testing', ip: '10.1.20.115', os.name: 'Windows 7', os.arch:
'x86', os.version: '6.1', java.version: '1.8.0_66'
Driver info: driver.version: unknown
        at <anonymous class>.FirefoxDriver.prototype.findElementInternal_(file:/
//C:/Users/SIMON~1.KYG/AppData/Local/Temp/anonymous2462846570487533916webdriver-
profile/extensions/fxdriver@googlecode.com/components/driver-component.js:10659)
        at <anonymous class>.FirefoxDriver.prototype.findElement(file:///C:/User
s/SIMON~1.KYG/AppData/Local/Temp/anonymous2462846570487533916webdriver-profile/e
xtensions/fxdriver@googlecode.com/components/driver-component.js:10668)
        at <anonymous class>.DelayedCommand.prototype.executeInternal_/h(file://
/C:/Users/SIMON~1.KYG/AppData/Local/Temp/anonymous2462846570487533916webdriver-p
rofile/extensions/fxdriver@googlecode.com/components/command-processor.js:12534)
        at <anonymous class>.DelayedCommand.prototype.executeInternal_(file:///C
:/Users/SIMON~1.KYG/AppData/Local/Temp/anonymous2462846570487533916webdriver-pro
file/extensions/fxdriver@googlecode.com/components/command-processor.js:12539)
        at <anonymous class>.DelayedCommand.prototype.execute/<(file:///C:/Users
/SIMON~1.KYG/AppData/Local/Temp/anonymous2462846570487533916webdriver-profile/ex
tensions/fxdriver@googlecode.com/components/command-processor.js:12481)
19:44:57.338 WARN - Exception: Unable to locate element: {"method":"id","selecto
r":"ff_frame442"}
For documentation on this error, please visit: http://seleniumhq.org/exceptions/
no_such_element.html
Build info: version: '2.48.2', revision: '41bccdd', time: '2015-10-09 19:59:12'
System info: host: 'testing', ip: '10.1.20.115', os.name: 'Windows 7', os.arch:
'x86', os.version: '6.1', java.version: '1.8.0_66'
Driver info: driver.version: unknown

完整堆栈跟踪(根据要求):

case
    when @sub_emp_id > 0 /* not null is also implied */
    then case when a.sub_emp_id = @sub_emp_id then 1 else 0 end
    else 1
end = 1

1 个答案:

答案 0 :(得分:0)

谢谢@Drets

解决它的代码(等待移动到该死的元素然后再点击它之前等待,SMH ......)

    self::waitforID($this->module);
    $this->moveto($this->byID($this->module));
    self::waitforID($this->module);
    $this->byID($this->module)->click();

//
...
//
    protected function waitforID($ID)
    {
        $this->waitUntil(function () use ($ID) 
        {
            if ($this->byId($ID))
            {
                return true;
            }
            sleep(1);
            return null;
        }, 120000);
    }