Java 为什么元素不能位于selenium中的方法函数中?

Java 为什么元素不能位于selenium中的方法函数中?,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我已经创建了一个获取事务ID的方法,但是找不到元素。我无法检索web表中的ID,因为它显示了一个无法定位元素的错误。此外,它将打开另一个空白窗口 这是获取ID的方法 public String getTransactionID(String ID) throws IOException { File src = new File("C:\\selenium\\ExcelData\\TestData.xlsx"); FileInputStream fis = new FileIn

我已经创建了一个获取事务ID的方法,但是找不到元素。我无法检索web表中的ID,因为它显示了一个无法定位元素的错误。此外,它将打开另一个空白窗口

这是获取ID的方法

public String getTransactionID(String ID) throws IOException {

    File src = new File("C:\\selenium\\ExcelData\\TestData.xlsx");
    FileInputStream fis = new FileInputStream(src);
    wb = new XSSFWorkbook(fis);
    XSSFSheet sh1 = wb.getSheetAt(0);

    String getValue = null;
    String TransactionID = null;
    for (int i = 0; i<=1000; i++) {
        if(sh1.getRow(i).getCell(0) != null)
        {
             getValue = sh1.getRow(i).getCell(0).getStringCellValue();
        }

        if(getValue != null) {
            if(getValue.contains(ID)) {
                System.setProperty("webdriver.gecko.driver","C:\\selenium\\geckodriver-v0.23.0-win64\\geckodriver.exe");

                WebDriver driver = new FirefoxDriver();
                TransactionID = driver.findElement(By.xpath("//table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[1]/td/table/tbody/tr[1]/td")).getText();
                FileOutputStream fout = new FileOutputStream(src);
                sh1.getRow(i).createCell(1).setCellValue(TransactionID);
                wb.write(fout);
                fout.close();

                break;
            }   
        }   

    }
    return TransactionID;
问题

问题在于以下代码片段:

WebDriver driver = new FirefoxDriver();
这将打开一个新的Firefox浏览器。这就是为什么你看到一个“空白窗口”打开了

TransactionID = driver.findElement(By.xpath("//table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[1]/td/table/tbody/tr[1]/td")).getText();
之后,您将立即尝试在网站上搜索该元素。可以想象,试图在空白页上查找元素显然会给您带来错误

您需要首先导航到网站:

driver.get(your_url_here);
旁注

您的xpath并不理想,因为它太硬编码了——如果在网站中创建新元素,您的xpath可能会崩溃。相反,您应该使用更动态的方法,利用元素的DOM属性,例如
id

//table[@id='xxx']//td
文件:

此外,变量名
TransactionID
应使用较低的大写字母,即
TransactionID

问题

问题在于以下代码片段:

WebDriver driver = new FirefoxDriver();
这将打开一个新的Firefox浏览器。这就是为什么你看到一个“空白窗口”打开了

TransactionID = driver.findElement(By.xpath("//table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[1]/td/table/tbody/tr[1]/td")).getText();
之后,您将立即尝试在网站上搜索该元素。可以想象,试图在空白页上查找元素显然会给您带来错误

您需要首先导航到网站:

driver.get(your_url_here);
旁注

您的xpath并不理想,因为它太硬编码了——如果在网站中创建新元素,您的xpath可能会崩溃。相反,您应该使用更动态的方法,利用元素的DOM属性,例如
id

//table[@id='xxx']//td
文件:

此外,变量名
TransactionID
应使用较低的大写字母,即
TransactionID