"搜索框"变量无法解决错误

时间:2016-03-03 06:42:33

标签: java

我正在运行以下代码并收到错误消息"无法解析搜索框。我该如何解决这个问题?请帮忙。我无法找出导致此错误的原因。在此先感谢:)

import java.io.File;
import java.io.FileInputStream;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class DataDriven_Ex {

     public static void main(String[] args) { 

    FirefoxDriver driver = new FirefoxDriver();
     driver.get("http://www.amazon.in");

    WebElement searchbox = driver.findElement(By.xpath("//*[@id='twotabsearchtextbox']"));
     }

     @Test
    public void test() throws Exception {

        File file = new File("F://Selenium excel//DataDriven.xlsx");
        FileInputStream fs = new FileInputStream(file);
        XSSFWorkbook wb = new XSSFWorkbook(fs);
        XSSFSheet sh = wb.getSheet("Sheet1");


        int rowcount = sh.getLastRowNum();

        for (int i = 0; i<=rowcount;i++)
        {

            String keyword = sh.getRow(i).getCell(0).getStringCellValue();


            searchbox.sendKeys(keyword);

            searchbox.submit();      

        }

    }       

    }

4 个答案:

答案 0 :(得分:1)

您的searchbox变量在本地声明到静态方法main()。从方法test()中看不到搜索框。这是代码中的问题。

解决方案:将搜索框声明从方法移动到类。并将static modifier添加到变量声明中。请参阅下面的代码。

static WebElement searchbox;

public static void main(String[] args)
{ 

    FirefoxDriver driver = new FirefoxDriver();
    driver.get("http://www.amazon.in");

    searchbox = driver.findElement(By.xpath("//*[@id='twotabsearchtextbox']"));
}

答案 1 :(得分:1)

您的searchbox对象是main方法的本地对象,您无法访问其块外的局部变量。这就是你遇到这个问题的原因。

解决方案:searchbox移至外部main,使其成为类级静态变量,然后访问它。

public class DataDriven_Ex {
    static WebElement searchbox;

    public static void main(String[] args) {

        FirefoxDriver driver = new FirefoxDriver();
        driver.get("http://www.amazon.in");
        searchbox = driver.findElement(By
                .xpath("//*[@id='twotabsearchtextbox']"));

    }

    @Test
    public void test() throws Exception {

        File file = new File("F://Selenium excel//DataDriven.xlsx");
        FileInputStream fs = new FileInputStream(file);
        XSSFWorkbook wb = new XSSFWorkbook(fs);
        XSSFSheet sh = wb.getSheet("Sheet1");

        int rowcount = sh.getLastRowNum();

        for (int i = 0; i <= rowcount; i++) {

            String keyword = sh.getRow(i).getCell(0).getStringCellValue();

            searchbox.sendKeys(keyword);

            searchbox.submit();

        }

    }

}

答案 2 :(得分:0)

声明

 static WebElement searchbox;
主要方法之前的

- 如下所示

static WebElement searchbox;
public static void main(String[] args) { 

FirefoxDriver driver = new FirefoxDriver();
 driver.get("http://www.amazon.in");

searchbox = driver.findElement(By.xpath("//*[@id='twotabsearchtextbox']"));
 }

答案 3 :(得分:0)

这是因为您的变量searchBox未在方法test()的上下文中声明。如果您只是在main()中声明,则无法从test()

中看到它

移动这行代码:

WebElement searchbox = driver.findElement(By.xpath("//*[@id='twotabsearchtextbox']"));

进入test()方法:

public void test() throws Exception {
    //Move here..
    WebElement searchbox = driver.findElement(By.xpath("//*[@id='twotabsearchtextbox']"));

    File file = new File("F://Selenium excel//DataDriven.xlsx");
    FileInputStream fs = new FileInputStream(file);
    XSSFWorkbook wb = new XSSFWorkbook(fs);
    XSSFSheet sh = wb.getSheet("Sheet1");

    //Your other codes here..
}

虽然您可以searchBox static变量,但我不建议。完成static后,变量将成为class的属性,而不再是单个对象的属性。