2016-10-13 4 views
0

Я хочу написать тест, чтобы проверить, нет ли веб-элемента с указанным текстом на странице. Это код для метода, выполняющего работу:findelement не бросает NoSuchElementException

public boolean checkOfAanvraagIsOpgevoerd (String titel) 
{ 

    String quote = "\""; 
    String titelMetQuotes = quote + titel +quote; 
    titelMetQuotes = "dierdieboeboe"; 
    boolean isOpgevoerd=false; 
    try { 
     driver.findElement(By.xpath(".//*[@id='listRequests']//h4/a[contains(text(),"+titelMetQuotes+")]")); 
     isOpgevoerd=true; 
    } catch (NoSuchElementException NE) { 
     NE.printStackTrace(); 
    } 
    return isOpgevoerd; 
} 

Хотя я абсолютно уверен, что нет тега на странице, содержащий текст «dierdieboeboe» до сих пор блок улова пропускается. Когда я заменяю, например, h4 в h5 в выражении xpath, исключение NoSuchElementException выбрано так, как ожидалось. Кажется, что содержащая часть в выражении игнорируется.

+1

Это может быть, что тег скрыт. Получается ли результат, когда XPath выполняется вручную в консоли вашего браузера? '$ x (" .//*[@ id = 'listRequests'] // h4/a [contains (text(), 'dierdieboeboe')] ")' –

+0

При вводе этого выражения в Firepath результат не соответствует узлы " – Frank

+0

Если вы не получите какой-либо результат вручную, то это вопрос времени. Элемент, найденный селеном, вероятно, удаляется после асинхронного обновления/действия. Попробуйте добавить задержку, чтобы проверить, так ли это. Если да, добавьте официанта, чтобы синхронизировать ваш тест. –

ответ

0

Попробуйте (обратите внимание на одинарные кавычки фактического текста):

By.xpath("//*[@id='listRequests']//h4/a[contains(text(),'"+titelMetQuotes+"')]") 

contains это функция, которая принимает две строки. Следовательно, текст вашей переменной titelMetQuotes должен быть указан. Очевидно, что в этом случае проще использовать одинарные кавычки.

Кроме того, имя переменной (Titel с кавычками) вполне вводит в заблуждение, потому что на самом деле не имеет котировки на другой недостаток в коде:

String titelMetQuotes = quote + titel +quote; 
titelMetQuotes = "dierdieboeboe"; 

Вторая строка просто перезаписывает цитируемый название с не строки в кавычках ,

Наконец, вам не нужно ведущую точку в вашем выражении XPath для того, чтобы найти первый элемент любого типа с идентификатором listRequests

+0

Спасибо, что работает. Он работает, когда элемент с определенным текстом присутствует не так хорошо, как когда присутствует элемент с определенным текстом. Вы сделали мой день Würgspaß. Можете ли вы объяснить, почему это работает? – Frank

+0

@Frank Приятно слышать. Я добавил объяснение в свой ответ. –

+0

thnx для дополнительной подсказки о ведущей точке. Кодолина с «dierdieboeboe» была добавлена ​​по причинам отладки, и я пропустил, что кавычки были перезаписаны. Все еще интересно, что было найдено в выражении без котировок. – Frank

Смежные вопросы