2017-01-24 1 views
1

Я надеюсь, что вы можете мне помочь.Java Selenium - найти строковый текст из нескольких div с тем же именем класса, используя xpath

Я обсуждал здесь всевозможные форумы и вопросы о том, как циклически перебирать несколько div с тем же именем класса, используя запросы xpath. Я довольно новичок в WebDriver и Java, поэтому я, вероятно, не задаю вопрос правильно.

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

String className1 = driver.findElement(By.xpath("(//div[@class='table_class'])")).getText(); 
Reporter.log("=====Class Identified as "+className1+"=====", true); 

Однако, когда я затем попытаться перебирать (я видел множественный ответы говорят, чтобы добавить суффикс [2] для запроса XPath) я получаю ошибку компиляции:

String className2 = driver.findElement(By.xpath("(//div[@class='table_class'])")[2]).getText(); 
Reporter.log("=====Class Identified as "+className2+"=====", true); 

выше дает ошибку о том, «Тип выражения должен быть типом массива, но он решил По «

Я не уверен на 100%, как структурировать это или чтобы настроить массив, а затем выполнить цикл.

Хотя это просто проверка метки полей в настоящее время, в конечном счете, мне нужно использовать этот подход, чтобы проверить последующие данные, которые вытягивают через, и я буду иметь такую ​​же проблему, то

+0

Есть ли причина, вы хотите использовать XPath или вы могли бы использовать CSS селекторы? – Corporalis

+0

Нет особых причин для использования xpath над селекторами css, но многие вещи, которые я читал в Интернете, все используют xpath, поэтому предполагалось, что это был «самый правильный» способ сделать это. – cookmr86

+0

Но вернемся к вопросу, не могли бы вы использовать 'driver .findElements' и loop through, а не нацеливать каждый элемент отдельно? – Corporalis

ответ

0

Вы получаете сообщение об ошибке для -

String className2 = driver.findElement(By.xpath("(//div[@class='table_class'])")[2]).getText(); 

потому что вы используете индекс в неправильном направлении изменить его -

String className2 = driver.findElement(By.xpath("(//div[@class='table_class'])[2]")).getText(); 

или

String className2 = driver.findElement(By.xpath("(//div[@class='table_class'][2])")).getText(); 

И лучший способ сделать это -

int index=1; 
List <WebElement> allElement = driver.findElements(By.xpath("(//div[@class='table_class'])")); 
for(WebElement element: allElement) 
{ 
    String className = element.getText(); 
    Reporter.log("=====Class Identified as "+className+""+index+""+"=====", true); 
    index++ 
} 
+0

Спасибо за ваш ответ. Мне не удалось получить первые два варианта, предложенные для работы, но я смог получить «лучший» способ работы – cookmr86

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