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

Selenium findElements()/findElement(按类)返回null

司健柏
2023-03-14

当我尝试使用webDriver搜索一个或多个元素时,它不会返回任何结果。操作系统:Ubuntu 14.04,框架:Intellij Idea,语言:Java。

我有以下声明:

WebDriver myWebDriver = new FirefoxDriver();
String myClass = "hid";

并前往:

myWebDriver.navigate().to("https://www.youtube.com/");

所有这些都有效。但当我宣布:

 private List <WebElement> myElements = new ArrayList<WebElement>();

然后访问myElements如下:

myElements = myWebDriver.findElements(By.className(myClass));

myElements为空,因为findElements似乎失败了,还有findElement(webElement)(使用后者,我将List更改为常规WebElement)。这在以前工作过。

下面是所有代码:

package com.search.mywork;
        import org.junit.Test;
        import org.openqa.selenium.*;
        import org.openqa.selenium.chrome.ChromeDriver;
        import org.openqa.selenium.firefox.FirefoxDriver;
        import java.util.ArrayList;
        import java.util.List;
        import java.util.Set;
        /**
         * Created by aby on 5/27/14.
         */

        public class searchWork {
            private long time = 5000;
            private String experience = "1-2 שנים";

            private WebDriver myWebDriver ;
            private WebElement mywebelement ;

            private List <WebElement> jobList = new  ArrayList<WebElement>();
            private List <WebElement> basketList = new  ArrayList<WebElement>();
            private List <WebElement> experienceList = new  ArrayList<WebElement>();
            private List <WebElement> myElements = new  ArrayList<WebElement>();

            private int i=0;
            private int t=0;

            String myClass=  "hid" ;

            private String myLastJobClicked = null;
            private String myLastJobClickedSearch = null;

            private void logIn(){
                //Create Driver and log in
                WebDriver myWebDriver = new FirefoxDriver();
        //        myWebDriver.navigate().to(" http://www.drushim.co.il/Enter.aspx");
        //        myWebDriver.findElement(By.id("MainContent_Login_EmailText")).sendKeys("");
        //        myWebDriver.findElement(By.id("MainContent_Login_PasswordText")).sendKeys("");
        //        myWebDriver.findElement(By.id("MainContent_SubmitLogin")).click();
        //        myWebDriver.navigate().to("http://www.drushim.co.il/jobs/subcat/68/?area=1");
                myWebDriver.navigate().to("https://www.youtube.com/");

            }

            private void searchForWeb(){
                //Go to web Search
                myWebDriver.navigate().to("http://www.drushim.co.il/jobs/subcat/68/?area=1");

                //Wait if needed

                synchronized (myWebDriver){
                    try {
                        myWebDriver.wait(time);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            } //Func not used

            private Boolean chkExperienceIsOk(String experienceFromWeb){
                //Check if Experience is ok
        //        if(experience == myWebDriver.findElement(By.className("additionalText")).getText()){
        //            myWebDriver.findElement(By.className("addToBaseketLink")).click();
        //        }
                return experience == experienceFromWeb ? true : false;
            }

            private void findelements(){
                try {
                    //jobList = myWebDriver.findElements(By.className("yt-dialog-loading"));
                    //jobList = myWebDriver.findElements(By.className("yt-dialog-loading"));
                    //mywebelement = myWebDriver.findElement(By.className("yt-dialog-loading"));
                    myElements = myWebDriver.findElements(By.className(myClass));
                    int i =0;
                    //basketList = myWebDriver.findElements(By.className("addToBaseketLink"));
                    //experienceList =  myWebDriver.findElements(By.className("additionalText"));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            private void clickOnModaa(){

                for (WebElement jobElement : jobList){
                    jobElement.click();
                    for (WebElement basketElement : basketList){
                        for (WebElement experienceElement :experienceList)
                        if (chkExperienceIsOk(experienceElement.getText())){
                            basketElement.click();
                        }
                    }
                }
            }

            private void closeWebDriver(){
                myWebDriver.close();
            }

            @Test
            public void search (){

                logIn();
                //searchForWeb();
                findelements();


                }//end sear fucn

            }//end class

共有1个答案

海翔宇
2023-03-14

这是您的问题:

private void logIn(){
     //Create Driver and log in

    // myWebDriver is a Class field already
    // Remove WebDriver declaracion

    this.myWebDriver = new FirefoxDriver();

    myWebDriver.navigate().to("https://www.youtube.com/");
}

您正在创建一个新的WebDriver,因此当您在findElements函数中使用它时,它没有正确初始化。

希望这有帮助!

 类似资料:
  • 为什么findElement(By)的返回类型是WebElement? 我知道文档中提到了返回类型是Webelment,但有人能解释一下为什么返回类型是Webelment吗。 我对这个话题的研究。 因为我们使用findElement搜索元素,webelement类用于表示HTML元素。 请让我知道我的想法是否正确或有任何具体原因

  • 当你进入网站时,按钮“继续”可以有两个选项:class="button "或class="btn "。如何在一个FindElement中同时搜索两个类?我不知道它应该是什么样子,但就像这样(示意性地) 或者更容易使用? 这不是工作。 感谢您的关注

  • 我需要识别X(取消)按钮。超文本标记语言如下: 尝试通过span直接执行,但不起作用(问题可能是,它不是唯一的(许多取消按钮具有相同的span) 需要做的事情是通过类:“配料容器标题关闭”,然后以某种方式“向下”到跨度。有人能告诉我怎么做吗?(1个父元素和多个子元素,选择该子元素)

  • 我目前正在学习C#,有人告诉我,可以使用explicit关键字重载方法返回类型,但他从未解释过如何重载。我搜索了所有地方,也阅读了一些关于stackoverflow的问题和答案,但我没有发现这样的事情,而且,在大多数情况下,回答的人说不可能通过返回类型重载方法。在这一切之后,我开始认为没有这种可能性。现在有人真的知道如何通过使用explicit关键字来重载方法返回类型了吗?或者这是可能的吗?先谢谢

  • 我有一个任务,我们要创造一个石头,纸,剪刀的游戏。它指定我们必须创建一个抽象的“工具”类,其中有三个子类:“ToolRock”、“ToolPaper”、“ToolScissors”。抽象类应该有一个“+getFeagnet():tool”函数(用斜体写成)。 我的假设是做一个像这样的抽象函数: RockTool类被指定为具有函数“+get弱点():tool”(不是用斜体写的),我的想法是创建一个覆

  • 我正在使用以下内容来获取此特定文件的URL,但它返回null。有人对该问题或执行此操作的替代方法有任何建议吗?