RobotFramework - ClassNotFound Исключение, когда селен org.openqa.selenium добавлен в мою библиотеку JavaLibrary

Пожалуйста, помогите мне в этой ситуации. Я выполнил следующие шаги в Java и добавил этот jar-файл в проект фреймворка Robot. При выполнении теста я получил ClassNotFoundException.

Исправленный код Java:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.openqa.selenium.WebElement;

public class StoreElements{
    public static final String ROBOT_LIBRARY_SCOPE = "GLOBAL";
    public String storeTexts(List<WebElement> text){
    for(WebElement theElement : text){
     System.out.println("The Element class is: 
     "+theElement.getAttribute("class")+", text: " + theElement.getText());
 }
return ((WebElement) text).getText();
 }
} 

Robot Framework Code:

*** Settings ***
Library  Selenium2Library
Library  keywords.kcc.StoreElements
*** Keyword ***
Get the customer Names
@{customers}    get webelements    xpath=//div[contains(@class,'name-column')]
store Texts  @{customers}

Это что-то вроде того, что мне нужно включить Selenium2Library в Java Project, а не просто селен Или же возможно включить Selenium2Library в Java?

Исключение, которое я получил,

[ ERROR ] Unexpected error: NoClassDefFoundError: 
org/openqa/selenium/WebElement
java.lang.NoClassDefFoundError: 
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetPublicMethods(Class.java:2902)
at java.lang.Class.getMethods(Class.java:1615)
at robot.utils.importer$py.import_$32(C:\jython2.7.0\Lib\site-
packages\robot\utils\importer.py:274)
at robot.utils.importer$py.call_function(C:\jython2.7.0\Lib\site-
packages\robot\utils\importer.py)
at 
robot.utils.importer$py._import_class_or_module$5(C:\jython2.7.0\Lib\site-
packages\robot\utils\importer.py:77)
at robot.utils.importer$py.call_function(C:\jython2.7.0\Lib\site-
packages\robot\utils\importer.py)
at robot.utils.importer$py.import_class_or_module$4(C:\jython2.7.0\Lib\site-
packages\robot\utils\importer.py:74)
at robot.utils.importer$py.call_function(C:\jython2.7.0\Lib\site-
packages\robot\utils\importer.py)
at robot.model.visitor$py.visit_suite$2(C:\jython2.7.0\Lib\site-
packages\robot\model\visitor.py:88)
at robot.model.visitor$py.call_function(C:\jython2.7.0\Lib\site-
packages\robot\model\visitor.py)
at robot.model.testsuite$py.visit$19(C:\jython2.7.0\Lib\site-
packages\robot\model\testsuite.py:161)
at robot.model.testsuite$py.call_function(C:\jython2.7.0\Lib\site-
packages\robot\model\testsuite.py)
at robot.model.itemlist$py.visit$11(C:\jython2.7.0\Lib\site-
packages\robot\model\itemlist.py:75)
at robot.model.itemlist$py.call_function(C:\jython2.7.0\Lib\site-
packages\robot\model\itemlist.py)
at robot.model.visitor$py.visit_suite$2(C:\jython2.7.0\Lib\site-
packages\robot\model\visitor.py:88)
at robot.model.visitor$py.call_function(C:\jython2.7.0\Lib\site-
packages\robot\model\visitor.py)
at robot.model.testsuite$py.visit$19(C:\jython2.7.0\Lib\site-
packages\robot\model\testsuite.py:161)
at robot.model.testsuite$py.call_function(C:\jython2.7.0\Lib\site-
packages\robot\model\testsuite.py)
at robot.utils.application$py._execute$10(C:\jython2.7.0\Lib\site-
packages\robot\utils\application.py:94)
at robot.utils.application$py.call_function(C:\jython2.7.0\Lib\site-
packages\robot\utils\application.py)
at robot.utils.application$py.execute_cli$5(C:\jython2.7.0\Lib\site-
packages\robot\utils\application.py:49)
at robot.utils.application$py.call_function(C:\jython2.7.0\Lib\site-
packages\robot\utils\application.py)
at runpy$py._run_code$9(C:\jython2.7.0\Lib\runpy.py:73)
at runpy$py.call_function(C:\jython2.7.0\Lib\runpy.py)
at runpy$py._run_module_as_main$14(C:\jython2.7.0\Lib\runpy.py:161)
at runpy$py.call_function(C:\jython2.7.0\Lib\runpy.py)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.WebElement
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 191 more

Согласно предложению Kootstra, добавлен файл jar selenium-server-standalone-3.3.1, и в настоящее время файл RED.xml выглядит так, как показано ниже. На этот раз красная строка не отображается под ключевым словом "Store Texts". Исключение выдается только при выполнении этого. И не длинное сообщение об исключении тоже.

Консольная команда:

Command: C:\jython2.7.0\bin\jython.exe -J-Dpython.path=C:\jython2.7.0\Lib\site-packages -J-cp .;C:\Program Files\Java\jdk1.8.0_121\lib;C:\Program Files\Java\jdk1.8.0_121\jre\lib;;.;C:\Java\Jars_KCC\GetElementText.jar;C:\jython2.7.0\selenium-server-standalone-3.3.1 -m robot.run -P C:\jython2.7.0\Lib\site-packages\Selenium2Library -i SmokeTest --listener C:\Users\CON_RT~1\AppData\Local\Temp\RobotTempDir3926709749247362236\TestRunnerAgent.py:63501:False -s KCC_Automation.TestSuites.TestResource -t KCC_Automation.TestSuites.TestResource.logon to kcc with valid credentials -t KCC_Automation.TestSuites.TestResource.navigate to customer's page -t KCC_Automation.TestSuites.TestResource.display customer names -t KCC_Automation.TestSuites.TestResource.stop testing C:\Java\Workspace\KCC_Automation
Suite Executor: Robot Framework 3.0.2 (Jython 2.7.0 on java1.8.0_121)

Я создал новый проект, затем добавил только "c:\jython2.7.0\selenium-server-standalone-3.3.1\" в classpath вместе с Selenium2library и собственной библиотекой java. Я также попытался добавить.jar в конце файла jar. Это все еще имеет исключение. Но одна вещь состоит в том, что теперь это перестало показывать;;.;

Вот команда консоли сейчас,

Command: C:\jython2.7.0\bin\jython.exe -J-Dpython.path=C:\jython2.7.0\Lib\site-packages -J-cp .;C:\Java\JarsKCC\GetElementList.jar;C:\jython2.7.0\selenium-server-standalone-3.3.1.jar -m robot.run -P C:\jython2.7.0\Lib\site-packages\Selenium2Library -i SmokeTest --listener C:\Users\CON_RT~1\AppData\Local\Temp\RobotTempDir9154227905398549031\TestRunnerAgent.py:54485:False -s KCC_Automation.TestSuites.TestResource -t KCC_Automation.TestSuites.TestResource.logon to kcc with valid credentials -t KCC_Automation.TestSuites.TestResource.navigate to customer's page -t KCC_Automation.TestSuites.TestResource.display customer names -t KCC_Automation.TestSuites.TestResource.stop testing C:\Java\Workspace\KCC_Automation 
Suite Executor: Robot Framework 3.0.2 (Jython 2.7.0 on java1.8.0_121)

На этот раз исключение другое. ClassCastException: org.python.core.PyObjectDerived не может быть приведен к org.openqa.selenium.WebElement

1 ответ

Решение

Ошибка, на мой взгляд, довольно прямая: [ ERROR ] Unexpected error: NoClassDefFoundError: org/openqa/selenium/WebElement это отсутствует этот класс. Это класс, найденный в регулярном selenium-server-standalone-x.x.x.jar,

За последние пару дней вы задали несколько вопросов в контексте RED и Jython, и я собираюсь предположить, что это ваша среда разработки. При этом, если это произойдет, шаги все равно будут применяться, но будут применяться по-другому.

Я взял ваш класс java и преобразовал его в файл Jar. В RED я создал проект робота и добавил его в виде файла библиотеки. В этом ответе Stackru я подробно описал процесс.

Поскольку скрипт робота не был завершен, я дополнил его так, что теперь он выглядит так:

*** Settings *** 
Library    StoreElements
Library    Selenium2Library

*** Test Cases ***
Get the customer Names
    @{customers}    Get Webelements    xpath=//div[contains(@class,'name-column')]
    Store Texts  ${customers}

Добавление библиотек необходимо для обеспечения того, чтобы ключевые слова распознавались, а это означает, что библиотеки загружены правильно.

Поскольку новый файл Jar относится к классу Selenium Server, он должен иметь к нему доступ. Это требует, чтобы этот класс был частью пути к классу. В RED это может быть достигнуто путем добавления selenium-server-standalone-x.x.x.jar к пути к классам в файле проекта RED.xml.

Это должно выглядеть так:

Хотя при запуске этого файла робота произойдет сбой, сгенерированная команда может представлять интерес, если вы хотите указать путь java из командной строки при работе с Jython и Robot Framework в RED:

C:\jython2.7.0\bin\jython.exe 
 -J-Dpython.path=C:\jython2.7.0\Lib\site-packages 
 -J-cp 
   .;
   C:\Eclipse\Workspace\JavaSelenium\ExampleLibrarySelenium.jar;
   C:\Eclipse\Workspace\ExampleJavaSelenium\selenium-server-standalone-3.3.1.jar 
 -m robot.run 
 -P C:\jython2.7.0\Lib\site-packages\Selenium2Library 
 --listener C:\Users\User\AppData\ ... \TestRunnerAgent.py:54540:False 
 -s JavaSelenium.Example 
 C:\Eclipse\Workspace\JavaSelenium

В приведенной выше отформатированной команде путь к классу определяется -J-cp аргумент. Добавленная пользовательская библиотека Java Robot ExampleLibrarySelenium.jar и дополнительно требуемая зависимость selenium-server-standalone-3.3.1.jar дополнять стандарт . что относится к папке, где jython.exe расположен.

Хотя добавление файлов JAR к существующим . Папка тоже сработала бы, лучше добавить необходимые файлы для каждого проекта, чтобы гарантировать, что добавлена ​​правильная версия, а также для локальных экспериментов.

Другие вопросы по тегам