Не удается найти существующий элемент, получая исключение NullPointerException вместо NoSuchElement - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь автоматизировать тестирование веб-данных. Я получаю это NullPointerException в каждом объекте WebElement, который я использую для определения местоположения. Мой код максимально прост:

public class tableTestStepDefs {

@FindBy(how = How.XPATH, using = "//*[@id=\"contenido-table\"]/tbody/tr[1]/td[3]")
public WebElement cell1;
@FindBy(how = How.ID, using = "\"DTE_Field_sufijo\"")
public WebElement editableCell1;

@When("^i click on cell1 to make it editable$")
public void hagoClickEnUnaCeldaDeLaColumnaSufijo(){
driver.get("http://192.168.242.104:7777/some/context");
cell1.click();
}

Я получаю исключение NullPointerException в каждом объекте, а не NoSuchElementException, которое я обычно получаю, когда драйвер не может найти какой-либо элемент, когда драйвер правильно входит на страницу. Если я отлаживаю, я могу найти все элементы с одинаковым идентификатором или выражением xpath в экземпляре драйвера. Не знаю, что происходит

Вот часть HTML:

<div class="dataTables_scrollBody ps-container ps-theme-default ps-active-x" data-ps-id="77fa0bd8-5ef4-1c4e-e67a-a8675b515900" style="position: relative; overflow: auto; width: 100%; height: 762px;">
    <table id="contenido-table" class="table table-condensed table-striped dataTable no-footer" role="grid" aria-describedby="contenido-table_info" style="width: 2072px;">
        <thead>
            <tr role="row" style="height: 0px;">
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 112px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="ICAO Aerolinea: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">ICAO Aerolinea</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 43px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Vuelo: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Vuelo</div>
                </th>
                <th class="text-center editable sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 43px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Sufijo: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Sufijo</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 71px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Matricula: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Matricula</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 33px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Tipo: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Tipo</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 72px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Aeronave: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Aeronave</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 72px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Categoria: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Categoria</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 52px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Origen: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Origen</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 96px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Escala Previa: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Escala Previa</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 96px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Estado Vuelo: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Estado Vuelo</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 139px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Fecha Programada: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Fecha Programada</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 116px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Fecha Estimada: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Fecha Estimada</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 93px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Fecha Actual: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Fecha Actual</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 58px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Servicio: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Servicio</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 44px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Stand: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Stand</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 47px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Cintas: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Cintas</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 91px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Inicio Cintas: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Inicio Cintas</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 73px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Fin Cintas: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Fin Cintas</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 115px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Primera Maleta: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Primera Maleta</div>
                </th>
                <th class="text-center sorting" aria-controls="contenido-table" rowspan="1" colspan="1" style="width: 107px; padding-top: 0px; padding-bottom: 0px; border-top-width: 0px; border-bottom-width: 0px; height: 0px;" aria-label="Ultima Maleta: Activar para ordenar la columna de manera ascendente">
                    <div class="dataTables_sizing" style="height: 0px; overflow: hidden;">Ultima Maleta</div>
                </th>
            </tr>
        </thead>
        <tbody>
            <tr role="row" class="odd">
                <td class=" text-center" name="ICAO Aerolinea">DRA</td>
                <td class=" text-center" name="Vuelo">5485</td>
                <td class=" text-center editable" name="Sufijo"></td>
                <td class=" text-center" name="Matricula" style="display: table-cell;text-overflow: ellipsis;overflow: hidden;max-width: 195px;">GBC001</td>
                <td class=" text-center" name="Tipo" style="display: table-cell;text-overflow: ellipsis;overflow: hidden;max-width: 195px;">NA</td>
                <td class=" text-center" name="Aeronave">A001</td>
                <td class=" text-center" name="Categoria">C</td>
                <td class=" text-center" name="Origen">LEBB</td>
                <td class=" text-center" name="Escala Previa" style="display: table-cell;text-overflow: ellipsis;overflow: hidden;max-width: 195px;"></td>
                <td class=" text-center" name="Estado Vuelo">SCH</td>
                <td class=" text-center" name="Fecha Programada" style="min-width: 97px">03/10/2018</td>
                <td class=" text-center" name="Fecha Estimada"></td>
                <td class=" text-center" name="Fecha Actual"></td>
                <td class=" text-center" name="Servicio">A</td>
                <td class=" text-center" name="Stand"></td>
                <td class=" text-center" name="Cintas"></td>
                <td class=" text-center" name="Inicio Cintas"></td>
                <td class=" text-center" name="Fin Cintas"></td>
                <td class=" text-center" name="Primera Maleta"></td>
                <td class=" text-center" name="Ultima Maleta"></td>
            </tr>
            <tr role="row" class="even">
                <td class=" text-center" name="ICAO Aerolinea">AAA</td>
                <td class=" text-center" name="Vuelo">1234</td>
                <td class=" text-center editable" name="Sufijo"></td>
                <td class=" text-center" name="Matricula" style="display: table-cell;text-overflow: ellipsis;overflow: hidden;max-width: 195px;">GBC001</td>
                <td class=" text-center" name="Tipo" style="display: table-cell;text-overflow: ellipsis;overflow: hidden;max-width: 195px;">NA</td>
                <td class=" text-center" name="Aeronave">A001</td>
                <td class=" text-center" name="Categoria">C</td>
                <td class=" text-center" name="Origen">LEBB</td>
                <td class=" text-center" name="Escala Previa" style="display: table-cell;text-overflow: ellipsis;overflow: hidden;max-width: 195px;"></td>
                <td class=" text-center" name="Estado Vuelo">SCH</td>
                <td class=" text-center" name="Fecha Programada" style="min-width: 97px">03/10/2018</td>
                <td class=" text-center" name="Fecha Estimada"></td>
                <td class=" text-center" name="Fecha Actual"></td>
                <td class=" text-center" name="Servicio">A</td>
                <td class=" text-center" name="Stand"></td>
                <td class=" text-center" name="Cintas"></td>
                <td class=" text-center" name="Inicio Cintas"></td>
                <td class=" text-center" name="Fin Cintas"></td>
                <td class=" text-center" name="Primera Maleta"></td>
                <td class=" text-center" name="Ultima Maleta"></td>
            </tr>
        </tbody>
    </table>
    <div class="ps-scrollbar-x-rail" style="width: 2063px; left: 0px; bottom: 3px;">
        <div class="ps-scrollbar-x" tabindex="0" style="left: 0px; width: 2055px;"></div>
    </div>
    <div class="ps-scrollbar-y-rail" style="top: 0px; right: 3px;">
        <div class="ps-scrollbar-y" tabindex="0" style="top: 0px; height: 0px;"></div>
    </div>
</div>

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Вам не хватает инициализации PageFactory, поэтому вы получаете NullPointerException вместо NoSuchElementException

Добавить конструктор так:

public class tableTestStepDefs {

@FindBy(how = How.XPATH, using = "//*[@id=\"contenido-table\"]/tbody/tr[1]/td[3]")
public WebElement cell1;
@FindBy(how = How.ID, using = "\"DTE_Field_sufijo\"")
public WebElement editableCell1;

public tableTestStepDefs() { //this!
    PageFactory.initElements(driver, this);
}

@When("^i click on cell1 to make it editable$")
public void hagoClickEnUnaCeldaDeLaColumnaSufijo(){
driver.get("http://192.168.242.104:7777/some/context");
cell1.click();
}
1 голос
/ 11 марта 2019

Одно из ваших утверждений FindBy неверно.

@FindBy(how = How.ID, using = "\"DTE_Field_sufijo\"")

Вы говорите, что идентификатор включает дополнительные кавычки.Оно должно выглядеть следующим образом:

@FindBy(how = How.ID, using = "DTE_Field_sufijo")

Попробуйте внести это изменение и посмотрите, работает ли оно.В противном случае вам нужно будет включить фактическое сообщение об ошибке, чтобы определить причину проблемы.

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