当前位置: 首页 > 知识库问答 >
问题:

在testng中添加selenium android驱动程序jar时出错。找不到类文件?

赖运珧
2023-03-14

我正在为一个Android应用程序编写一个测试类,但我不断收到错误代码“项目未生成,因为它的构建路径不完整。找不到org.openqa.selenium.html5.BrowserConnection的类文件。修复构建路径,然后尝试构建这个项目。”每次我都尝试将selenium Android驱动程序jar文件添加到项目中。我需要Android驱动程序正确使用带有Appium的TestNG,否则Appium在测试时无法在页面上找到元素。代码:

package appiumTest;

import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.android.*;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.*;

public class TestCase {

    public class NewTest {
        WebDriver driver = new AndroidDriver();
        @BeforeClass
        protected void setUp() throws MalformedURLException {

            //Tells the program what device is used
            DesiredCapabilities capabilities = new 

            DesiredCapabilities();
            capabilities.setCapability("BROWSER_NAME", "Android");
            capabilities.setCapability("VERSION", "4.2.2"); 
            capabilities.setCapability("deviceName","Emulator");
            capabilities.setCapability("platformName","Android");
            //Tells the program what app is being run
            capabilities.setCapability("appPackage",                                 
   "com.android.testapp2");

    capabilities.setCapability("appActivity",
   "com.android.testapp2.MainActivity    ");
     driver = (AndroidDriver) new RemoteWebDriver(new
             URL("http://127.0.0.1:4723/wd/hub"), capabilities);
        }
        @Test
        public void test() {
        WebElement userName = driver.findElement(By.id("txtUserName"));
               userName.sendKeys("a");
            WebElement button = driver.findElement(By.id("btnEnter"));
    button.click();
        };
        @AfterClass
        protected void tearDown() throws Exception {

            driver.quit();
        }

    }


}

下面是我试图编辑的pom.xml文件的代码:

<project xmlns="http://maven.apache.org/POM/4.0.0"        

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  
http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>TestProject</groupId>
  <artifactId>TestProject</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <source/>
          <target/>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

我看不出有什么地方可以放置依赖关系,我甚至不确定这是不是我应该做的。

共有1个答案

岑畅
2023-03-14

好吧,我想这会让你重新开始的。

pom.xml中的改进:

>

  • 没有定义的依赖项,因此添加了所需的onces

    • TestNG V6.9.8
    • Selenium-Java v2.39.0
    • Selenium-Android-Driver v2.39.0
      备注1:Selenium Java和Android库应该是相同的版本(据我所知,否则会出问题)。_注释2:_Selenium Android库,是一个较旧的库。它实际上应该被更新的selendroid所取代。因此,某些导入也会发生变化。

    改进了 ,它们是标准的小写,应该代表一些逻辑上唯一的东西。也许您将项目存储在bitbucket或github上,那么逻辑组id将以com.github. . 开头。

    已删除 src

    Maven项目文件pom.xml:

    下面的注释是显示的正确的Maven起始标记 ,因为它应该在pom.xml中使用。但StackOverflow不会正确显示。

    project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  http://maven.apache.org/xsd/maven-4.0.0.xsd">
    

    下面是更正的pom.xml,但没有正确的开始标记。

    <project>
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.organisation.project</groupId>
        <artifactId>android-selenium</artifactId>
        <version>0.1.0-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
                <version>6.9.8</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-java</artifactId>
                <!--
                <version>2.48.2</version>
                -->
                <version>2.39.0</version>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-android-driver</artifactId>
                <version>2.39.0</version>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.3</version>
                    <configuration>
                        <source />
                        <target />
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    TestCase中的改进:

    • 不需要使用内部类newtest,因此将其删除。
    • 删除了字段驱动程序的初始化,因为它是在@BeforeClass方法中初始化的。
    • @AfterClass中添加了检查,仅在驱动程序初始化时调用driver.quit()

    TestCase:

    package appiumTest;
    
    import java.net.MalformedURLException;
    import java.net.URL;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.android.*;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.remote.DesiredCapabilities;
    import org.openqa.selenium.remote.RemoteWebDriver;
    import org.testng.annotations.*;
    
    public class TestCase {
        WebDriver driver; // = new AndroidDriver();
    
        @BeforeClass
        protected void setUp() throws MalformedURLException {
    
            // Tells the program what device is used
            DesiredCapabilities capabilities = new DesiredCapabilities();
            capabilities.setCapability("BROWSER_NAME", "Android");
            capabilities.setCapability("VERSION", "4.2.2");
            capabilities.setCapability("deviceName", "Emulator");
            capabilities.setCapability("platformName", "Android");
            // Tells the program what app is being run
            capabilities.setCapability("appPackage", "com.android.testapp2");
    
            capabilities.setCapability("appActivity",
                    "com.android.testapp2.MainActivity");
            driver = (AndroidDriver) new RemoteWebDriver(new URL(
                    "http://127.0.0.1:4723/wd/hub"), capabilities);
        }
    
        @Test
        public void test() {
            WebElement userName = driver.findElement(By.id("txtUserName"));
            userName.sendKeys("a");
            WebElement button = driver.findElement(By.id("btnEnter"));
            button.click();
        };
    
        @AfterClass
        protected void tearDown() throws Exception {
            if (driver != null) {
                driver.quit();
            }
        }
    
    }
    

    可能的改进

    • 更正包名称(当前为appiumtest),但它不是与命名约定内联的,都是小写,用点.分隔。和有意义的内容,类似于Maven group-id。Sp以com.github. .
    • 开头
    • TestCase类取一个更好的名称
    • 更新到Selendroid,然后更新Selenium Java版本

  •  类似资料:
    • 关于在Selenium 2.4.2中添加以下代码 System.SetProperty(“webdriver.chrome.driver”,“d:/chromedriver_win32//chromedriver.exe”);WebDriver驱动程序=新ChromeDriver(); chrome窗口被打开,但“一些黄色警告消息显示为”-您正在使用一个不支持的命令行标志:--忽略-证书-错误。稳

    • 我正在构建一个java服务器程序,该程序使用JDBC驱动程序连接到psql数据库。我需要在。jar文件中编译程序,但是当我尝试这样做并运行它时,我得到了这个异常。(程序必须在linux机器上运行) java.lang.ClassNotFoundException:org.PostgreSQL.Driver at java.net.urlClassLoader.findClass(URLClassL

    • 我正在开发一个java web应用程序,它使用Jasper report来显示一些报表。现在我的版本发生了一些变化,我得到了以下错误: 我认为错误可能是由于构建路径造成的。这是我的依赖树: 你能给我一些关于这个错误的建议吗?

    • 我做了一个名为诊所的项目,它有3个jframe 登录 它连接到Access数据库(.mdb)。 我将其转换为JAR文件,但它给我的错误,它没有连接到UCanAccess驱动程序。 我甚至尝试了SQLite管理器,但也有同样的问题。我使用的是netbean 8。我只是直接选择了清洁和构建选项来制作jar文件。希望这能有所帮助。

    • 我也检查了不同的MacBook,但它工作正常,它启动了浏览器 这里是代码和一些SS。 线程“main”java.lang.noClassDeffounder中的异常错误:org/openqa/selenium/firefox/firefoxdriver at com.pack.textboxdemo.main(textboxdemo.java:16)由:java.lang.classnotfoun

    • 问题内容: 我正在尝试通过Laravel与PostgreSQL数据库进行连接,以进行php artisan迁移,但由于它正在读取MySQL的数据库名称,因此似乎没有针对性。 以下是来自database.php的命令: 如果删除MySQL路径,则会得到: 编辑: 尝试进行php artisan迁移时,我得到一个’PDOException:找不到驱动器’。我正在使用WAMP,并且在Win8.1中。使用