我正在运行以下代码并收到错误消息"无法解析搜索框。我该如何解决这个问题?请帮忙。我无法找出导致此错误的原因。在此先感谢:)
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();
}
}
}
答案 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
的属性,而不再是单个对象的属性。