更新到 Selenium 3.4 时出现 ClassCastException

ClassCastException on Updating to Selenium 3.4

我们正在使用 QAF 进行功能测试自动化。我们最近将 selenium 版本从 3.3.1 升级到 3.4.0,它开始在某些地方出现以下错误。

Caused by: java.lang.ClassCastException: org.openqa.selenium.remote.RemoteWebElement cannot be cast to com.qmetry.qaf.automation.ui.webdriver.QAFExtendedWebElement
at com.qmetry.qaf.automation.ui.webdriver.QAFExtendedWebDriver.findElementByCssSelector(QAFExtendedWebDriver.java:366)
at com.qmetry.qaf.automation.ui.webdriver.QAFExtendedWebDriver.findElementByCssSelector(QAFExtendedWebDriver.java:1)
at org.openqa.selenium.By$ByCssSelector.findElement(By.java:430)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:402)
at com.qmetry.qaf.automation.ui.webdriver.QAFExtendedWebDriver.findElement(QAFExtendedWebDriver.java:169)
at com.qmetry.qaf.automation.ui.webdriver.QAFExtendedWebDriver.findElement(QAFExtendedWebDriver.java:1)
at org.openqa.selenium.support.ui.ExpectedConditions.findElement(ExpectedConditions.java:895)
at org.openqa.selenium.support.ui.ExpectedConditions.access[=10=]0(ExpectedConditions.java:41)
at org.openqa.selenium.support.ui.ExpectedConditions.apply(ExpectedConditions.java:181)
at org.openqa.selenium.support.ui.ExpectedConditions.apply(ExpectedConditions.java:178)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:238)

我的观察是,如果我们没有 driver.findBy(BY) 语句,它工作正常。出于测试目的,我在一个地方尝试了 driver.findBy(String) 而不是 driver.findBy(BY) 并且效果很好。但是我不知道团队有多少地方使用了上面的方法。

下面是重现错误的测试:

@Test
    public void test1() {
        get("/");
        QAFExtendedWebDriver driver = getDriver();
        driver.findElement(By.name("q")).sendKeys("do something");
    }

由于这个问题,我们必须恢复到 selenium 版本 3.3.1。有人可以帮忙吗?

这是因为 selenium class 之一的方法可见性发生了变化。它可能会在下一个版本中被 fix-4279 解决。

已通过 qaf-2.1.12-RC2 解决