Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium webdriver 如何使adf-richclient-automation-11.jar与最新的selenium java 3.x兼容_Selenium Webdriver_Oracle12c_Oracle Adf - Fatal编程技术网

Selenium webdriver 如何使adf-richclient-automation-11.jar与最新的selenium java 3.x兼容

Selenium webdriver 如何使adf-richclient-automation-11.jar与最新的selenium java 3.x兼容,selenium-webdriver,oracle12c,oracle-adf,Selenium Webdriver,Oracle12c,Oracle Adf,我正在为Oracle ADF应用程序开发Selenium测试 我用的是: JDeveloper fmw_12.2.1.3.0_bpmqs安装 非常有用 我面临的问题是: 基于与JDeveloper一起分发的adf-richclient-automation-11.jar(用户可以在*Oracle\u Home\Oracle\u common\modules\Oracle.adf.view*文件夹中找到它),并在文档中描述为Oracle自定义Selenium 在2.53.1版本的selenium

我正在为Oracle ADF应用程序开发Selenium测试

我用的是:

  • JDeveloper fmw_12.2.1.3.0_bpmqs安装
  • 非常有用
  • 我面临的问题是:

    基于与JDeveloper一起分发的adf-richclient-automation-11.jar(用户可以在*Oracle\u Home\Oracle\u common\modules\Oracle.adf.view*文件夹中找到它),并在文档中描述为Oracle自定义Selenium

    在2.53.1版本的selenium java库中,一切都可以正常工作

    但当我将selenium java library升级到3.3.1版本时,我的测试项目出现了异常:

    org.openqa.selenium.WebDriverException: java.lang.NoSuchMethodError: org.openqa.selenium.support.ui.**WebDriverWait.until(Lcom/google/common/base/Function;)Ljava/lang/Object;** Build info: version: 'unknown', revision: '5234b32', time: '2017-03-10 09:00:17 -0800' System info: host: 'EE-LATITUDE-749', ip: '10.10.207.64', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_172' Driver info: driver.version: unknown
      com.redheap.selenium.junit.PageProvider.createPage(PageProvider.java:49)
      com.redheap.selenium.junit.PageProvider.goHome(PageProvider.java:36)
      ru.russvet.selenium.tests.P6_ProcessPageTest.(P6_ProcessPageTest.java:38)
      java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    Caused by: java.lang.NoSuchMethodError: org.openqa.selenium.support.ui.WebDriverWait.until(Lcom/google/common/base/Function;)Ljava/lang/Object;
      oracle.adf.view.rich.automation.selenium.RichWebDrivers.waitForServer(RichWebDrivers.java:112)
      oracle.adf.view.rich.automation.selenium.RichWebDrivers.waitForRichPageToLoad(RichWebDrivers.java:175)
      oracle.adf.view.rich.automation.selenium.RichWebDrivers.waitForRichPageToLoad(RichWebDrivers.java:158)
      com.redheap.selenium.page.Page.(Page.java:53)
      com.redheap.selenium.page.Page.(Page.java:45)
      ru.russvet.selenium.pages.BPMWorkspaceLoginPage.(BPMWorkspaceLoginPage.java:19)
      com.redheap.selenium.junit.PageProvider.createPage(PageProvider.java:47)
    
    调查结果如下:

    1) 在selenium java库中,从3.3.1接口开始,直到函数被更改并接受函数,谓词是java 8库中的供应商类,而不是Guava库中的供应商类:

    2) 最近的guava发行版(21+版本)可能解决了什么问题,其中函数和谓词的Google版本扩展了Java8的等价版本

    因此,看起来adf-richclient-automation-11.jar是用SeleniumJavaLibrary2.x构建的,这会在运行测试时导致异常

    我们是通过Oracle支持部门提出的,但是他们还没有提供关于这个库的新版本的信息

    因此,我的问题是: 1) 重建adf-richclient-automation-11.jar以使其与最新版本的selenium java as 3.x兼容的可能方法是什么


    2) 有人在JDeveloper的特定发行版中找到了更新版本的adf-richclient-automation-11.jar吗

    我曾经是Oracle内部小型团队的一员,该团队构建了您所指的自动化库


    这里的问题是API兼容性,除非ADF自动化库根据WebDriver 3.x重新打包并由Oracle OTN重新分发,否则您别无选择,只能坚持使用Selenium 2.x库。WebDriver 3.x是针对Java8的,这也是Oracle希望很快升级到3.x的另一个原因。您是否通过OTN论坛或Oracle支持提出了您的担忧?

    好吧,请回答我自己。目前唯一可行的方法是反编译adf-richclient-automation-11.jar,清理并重新打包WebDriver 3.x

    相应的Eclipse项目在这里

    此项目不包含作为原始库的测试类。我没有从原始库运行任何测试,因为我不知道需要什么测试环境。 因此,我直接在我的主项目中测试了重新打包的库

    如何完成获取源代码、清理源代码、修复错误和重新打包库的步骤,您可以在git存储库的readme.md中找到,以及以下内容:

    手动重建adf-richclient-automation-11.jar的完整步骤: 环境
  • 安装Eclipse
  • 安装反编译器插件
  • 设置用户库
  • 台阶
  • 创建Java项目
  • 反编译adf-richclient-automation-11.jar
  • 将反编译的源提取到path\to\project\u name\src中\
  • 检查src
  • 5.1删除Selenium RC使用的类:

            path/to/project_name/src/
            oracle/adf/view/rich/automation/selenium/RichSelenium.java -> Delete
    
    5.2删除程序包oracle.adf.view.rich.automation.test.*->Delete

    oracle.adf.view.rich.automation.test
    oracle.adf.view.rich.automation.test.browserfactory
    oracle.adf.view.rich.automation.test.component
    oracle.adf.view.rich.automation.test.selenium
    
  • 修复错误:
    • path/to/project_name/src/oracle/adf/view/rich/automation/selenium/RichWebDrivers.java
      • []241类型不匹配:无法从元素类型对象转换为字符串->
    fix 239->List logs=(List)jsExecutor.executeScript(_GET_和_CLEAR_LOG_MESSAGES_JS,
    = 
    List logs=(List)jsExecutor.executeScript(_GET_和_CLEAR_LOG_MESSAGES_JS,
    新对象[]{logLevel.toString().toUpperCase()});
    用于(字符串s:日志){
    sbf.append(s).append(_NEW_LINE);
    }
    
    • []321类型不匹配:无法从元素类型对象转换为字符串->
    fix 320->Set handles=webDriver.getWindowHandles();
    =
    公共字符串应用(WebDriver WebDriver){
    Set handles=webDriver.getWindowHandles();
    for(字符串句柄:句柄){
    if(openWindowHandles.contains(句柄))
    继续;
    返回手柄;
    }
    返回null;
    }
    
  • 构建并导出到jar中
  • 可选修复oracle.adf.view.rich.automation.test.*包中类中的错误。
    • path/to/project_name/src/oracle/adf/view/rich/automation/test/selenium/WebDriverManager.java
      • []87类型不匹配:无法从元素类型对象转换为字符串->
    fix 85 Set windowHandles=webDriver.getWindowHandles();
    =
    试一试{
    设置windowHandles=webDriver.getWindowHandles();
    _LOG.fine(“尝试关闭所有窗口…”);
    对于(字符串句柄:windowHandles){
    
    • path/to/project\u name/src/oracle/adf/view/rich/automation/test/selenium/RichWebDriverTest.java
      • []标记“最终”上出现953语法错误,请删除此标记->
    fix->删除956952949941
    =
    受保护的无效刷新(){
    _LOG.fine(“正在执行刷新()”;
    这个.getWebDriver().navigate().refresh();
    试一试{
    警报警报=this.getWebDriver().switchTo().Alert();
    如果(警报!=null){
    alert.accept();
    };
    }
    捕获(WebDriverException警报){}
    最后{
    这个.waitForPage();
    }
    }
    
    • []1026异常的不可访问捕获块。它已由Throwable的捕获块处理->
    fix->用Jad反编译器的变体替换整个方法->
    ->Windows->首选项->Java->反编译器->默认类反编译器:Jad->应用程序并关闭
    ->修复1020、1028 Dupl
    
        Help -> Marketplace -> Enhanced Class Decompiler
        Windows -> Preferences -> Java -> Decompiler -> Default Class Decompiler: CFR -> Applay and Close   
    
        Windows -> Preferences -> Java -> Build Path -> User Libraries
             New->
                Name -> selenium-java-3.3.1
                Add External JARs... ->
                    path\to\selenium-java-3.3.1\
                        client-combined-3.3.1-nodeps.jar
                        lib\*.jar
             ->Finish
    
             New->
                Name -> adf-richclient-automation-11.jar
                Add External JARs... ->
                    path\to\Oracle_Home\oracle_common\modules\oracle.adf.view\
                        adf-richclient-automation-11.jar
             ->Finish
         -> Applay and Close
    
    Eclipse -> New -> Java Project
        Name -> project_name
        JDK -> 1.8
        Build Path -> Libraries -> Add Library -> User Library -> Next
            User Libraries ...
                selenium-java-3.3.1
                adf-richclient-automation-11.jar
    
    Project Explorer -> adf-richclient-automation-11.jar -> Context Menu -> Export Sources
        path\to\project_name\src\
            adf-richclient-automation-11-src.zip
        Project Explorer -> Refresh
            src -> adf-richclient-automation-11-src.zip
    
    Project Explorer -> Refresh
            src -> adf-richclient-automation-11-src.zip
                    * oracle.adf.view.rich.automation.selenium
                    * oracle.adf.view.rich.automation.test
                       oracle.adf.view.rich.automation.test.browserfactory
                    * oracle.adf.view.rich.automation.test.component
                    * oracle.adf.view.rich.automation.test.selenium
                       org.openqa.selenium
                       org.openqa.selenium.firefox
    
            path/to/project_name/src/
            oracle/adf/view/rich/automation/selenium/RichSelenium.java -> Delete
    
     remove -> path\to\project_name\src\adf-richclient-automation-11-src.zip
     Project Explorer -> Export -> Java -> JAR file -> Next
         select src folder only
         check Export generated classes and resources
         uncheck .classpath, .project
             -> Finish -> Ok in warning dialog