【问题标题】:Selenium findElements() / findElement(by class) returns nullSelenium findElements() / findElement(by class) 返回 null
【发布时间】:2014-05-28 07:22:42
【问题描述】:

当我尝试使用 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 为 null,因为 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

【问题讨论】:

  • 没有 HTML 无话可说。
  • 你可以看到我去("youtube.com/");那里有html..
  • 一切似乎都很好。你能发布你所有的代码吗?我可以看到 myElements 是一个字段,那么你在哪里分配值并使用它们?
  • 我想发布我所有的代码,但是当我尝试复制/粘贴时,它并没有像代码一样粘贴所有代码。我很清楚吗?我试试,但是……
  • 可以上传文件吗?

标签: java selenium intellij-idea


【解决方案1】:

这是你的问题:

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 函数中使用它时,它没有正确初始化。

希望这会有所帮助!

【讨论】:

  • 移除 WebDriver myWebDriver = new FirefoxDriver();,只留下 myWebDriver = new FirefoxDriver();
  • haaa.. 没问题!明白了!
  • @AbyW 我使用“this”更具体地更新了答案。希望你现在明白了。 :)
猜你喜欢
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多