Почему элемент не может быть расположен в функции метода в селене? - PullRequest
0 голосов
/ 15 февраля 2019

Я уже создал метод для получения идентификатора транзакции, но элемент не может быть найден.Я не могу получить идентификатор в веб-таблице, потому что он показывает ошибку, которая не может найти элемент.Кроме того, откроется еще одно пустое окно.

Это метод для получения идентификатора

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;

Это строка для вызова метода

GetExcel transID = new GetExcel();
transID.getTransactionID("Transaction ID");

1 Ответ

0 голосов
/ 15 февраля 2019

Проблема

Проблема заключается в следующем фрагменте кода:

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);

Sidenotes

Ваш xpath не идеален, так как он слишком жестко закодирован - если на сайте создается новый элемент, ваш xpath, вероятно, сломается.Вместо этого следует использовать более динамичный подход, который использует свойства DOM элемента, такие как id:

//table[@id='xxx']//td

Документация: https://www.w3schools.com/xml/xml_xpath.asp

Кроме того, имя вашей переменной TransactionID должнобыть в нижнем колпачке, то есть transactionID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...