WebDriver 异常

软件测试 硒2 网络驱动程序 健身 例外
2022-02-03 12:44:00

我正在使用 Fitnesse 来定义一些硒测试。我们让它们都在 CHROME 下运行,但在 FIREFOX 下会出现一些例外情况。为了运行测试,我使用了外部 chrome webdriver。也就是说,我正在使用 selenium-server 2.7.0 并以下列方式启动它:

D:\projects\dev\jdk\1.6\bin\java -jar ./selenium-server-standalone-2.7.0.jar - Dwebdriver.chrome.driver=c:\chromedriver\chromedriver.exe -Dfile.encoding=UTF8

__EXCEPTION__:org.openqa.selenium.InvalidElementStateException: Cannot perform native interaction: Could not load native events component.; duration or timeout: 2.05 seconds
Build info: version: '2.7.0', revision: '13926', time: '2011-09-23 13:24:59'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_16'
Driver info: driver.version: RemoteWebDriver; duration or timeout: 2.06 seconds
Build info: version: '2.7.0', revision: '13926', time: '2011-09-23 15:09:51'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_16'
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:147)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:113)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:397)
at org.openqa.selenium.remote.ExecuteMethod.execute(ExecuteMethod.java:47)
at org.openqa.selenium.remote.RemoteMouse.mouseMove(RemoteMouse.java:89)
at org.openqa.selenium.interactions.MoveMouseAction.perform(MoveMouseAction.java:37)
at org.openqa.selenium.interactions.CompositeAction.perform(CompositeAction.java:32)
at com.bmw.next.selenium2.util.MouseUtil.moveToElement(MouseUtil.java:22)
    ....

也就是说,抛出了异常InvalidElementStateException,我不明白出了什么问题。Firefox 和 Chrome 的代码相同。有人经历过这种行为吗?

任何提示将不胜感激。

提前致谢。

2个回答

我的猜测是您的元素不存在。使用 Firefox 驱动程序的 Click() 方法不像 Selenium IDE 中的 ClickAndWait 那样工作。在单击某些内容之前,您必须显式地进行隐式等待。我的猜测是您连续点击了 2 次,第二次点击失败,因为该元素尚不存在,因为第一次点击提交了表单或其他内容。

在失败的代码行之前调用此方法。您需要找到此 C# 代码的 Java 实现,但我认为它可能会解决您的问题。

public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds)
{
    if (timeoutInSeconds > 0)
    {
        var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
        return wait.Until(drv => drv.FindElement(by));
    }
    return driver.FindElement(by);
}

您也可以按照此程序进行操作。
首先,将您的网络元素复制到网络元素类型的变量中:

webelement elem=driver.findElement(By.id("elementid"));

现在采取行动

elem.click();

当 DOM 元素发生变化时,id将不会与堆栈相同,因此当在元素识别后给出单击动作时,它会再次检查相同的元素。

此过程可用于可能的异常,例如staleelementexceptionelementnotfound