Получение атрибутов изображений всех изображений в классе разделов

#user-interface #selenium #selenium-webdriver

#пользовательский интерфейс #selenium #selenium-webdriver

Вопрос:

Я пытаюсь получить атрибуты всех изображений, которые присутствуют внутри класса section. Атрибуты изображений, которые я пытаюсь получить, следующие :

  1. Высота изображения.

  2. Ширина изображения

  3. Src изображения

Я пытаюсь добиться этого с помощью Selenium Webdriver.

Я новичок в Selenium, поэтому я просмотрел веб-руководства и различные ответы, предоставленные в Интернете.

Мой код выглядит следующим образом :

  public void findAllImages(){
driver=new FirefoxDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

baseUrl="http://northeastindiaholidays.com/";
driver.get(baseUrl);


WebElement menu=driver.findElement(By.className("destinations clearfix full"));
List<WebElement> allImages=driver.findElements(By.tagName("img"));


List<String> widthofImage = new ArrayList<String>();
List<String> heightofImage = new ArrayList<String>();
List<String> srcofImage = new ArrayList<String>();

for (WebElement imageFromList: allImages){
     widthofImage.add(imageFromList.getAttribute("width"));
       heightofImage.add(imageFromList.getAttribute("height"));
      srcofImage.add(imageFromList.getAttribute("src"));

      System.out.println(widthofImage);
      System.out.println(heightofImage);
      System.out.println(srcofImage);

     }

 }
 }
  

HTML страницы выглядит следующим образом :

    <section class="destinations clearfix full" style="margin-bottom:10px!important">
   <h1>Beach Destinations</h1>
   <article class="location_item one-fourth fluid-item">
   <figure>
   <a title="" href="http://northeastindiaholidays.com/?location=goa">
   <img width="270" height="152" alt="" src="http://northeastindiaholidays.com/wp-    content/uploads/2014/06/Goa.gif"/>
  </a>
  </figure>
  <div class="details">
  </article>
  

URL страницы: Праздники Северо-Восточной Индии

Комментарии:

1. Итак, у вас есть вопрос?

2. Да, я понимаю, что я полностью пропустил описание проблемы. Я получаю сообщение об ошибке при выборе имени класса с использованием класса целевого раздела. Вот ссылка на изображение ошибки, которую я получаю [ссылка] drive.google.com/file/d/0B3aMk3yP4IBFNW8tV0FqRXRPWnc /…

3. Пожалуйста, отредактируйте исходное сообщение, добавив новую информацию. Также: вы действительно сделали снимок экрана текстового окна? Почему?

4. Я думаю, что ошибка говорит сама за себя: «Составные имена классов не поддерживаются». Вероятно, в этой строке: driver.findElement(By.className("destinations clearfix full")); . Остальная часть вывода ошибки сообщает вам о решении.

5. Используйте CSS-селектор «.destination.clearfix.full». Это позволит найти любой элемент со всеми 3 классами. Это также работает, даже если порядок классов меняется. Xpath менее снисходителен

Ответ №1:

Попробуйте следующий код:

 import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.thoughtworks.selenium.webdriven.commands.GetText;

public class Sample 
{       
WebDriver driver;
@BeforeClass
public void BeforeClass() throws InterruptedException, IOException
{
    System.setProperty("webdriver.firefox.profile", "default");
    driver = new FirefoxDriver();
    driver.manage().window().maximize();
    driver.get("http://northeastindiaholidays.com/");
    Thread.sleep(4000);

}
@Test
public void fetchCustKeys() throws Exception
{
    //WebElement menu1=driver.findElement(By.xpath("//*[@id='content']/section[1]"));
    WebElement menu=driver.findElement(By.xpath("//*[@id='content']/section[./h1[text()='Beach Destinations']]"));
    List<WebElement> allImages=menu.findElements(By.tagName("img"));

    List<String> widthofImage = new ArrayList<String>();
    List<String> heightofImage = new ArrayList<String>();
    List<String> srcofImage = new ArrayList<String>();
    for (WebElement imageFromList: allImages)
    {
        widthofImage.add(imageFromList.getAttribute("width"));
        heightofImage.add(imageFromList.getAttribute("height"));
        srcofImage.add(imageFromList.getAttribute("src"));
    }
    System.out.println(widthofImage);
    System.out.println(heightofImage);
    System.out.println(srcofImage);
}
}
  

Кроме XPATH раздела, в коде есть еще два исправления.

1) Используя вышеупомянутый XPATH для раздела, вы можете повторно использовать XPATH, просто изменив имя раздела. Например:

 WebElement menu=driver.findElement(By.xpath("//*[@id='content']/section[./h1[text()='Beach Destinations']]"));
WebElement menu=driver.findElement(By.xpath("//*[@id='content']/section[./h1[text()='Top destinations around North East India']]"));
  

2) Используя следующий оператор, вы получите изображения на всей веб-странице.

 List<WebElement> allImages=driver.findElements(By.tagName("img"));
  

Поэтому нам нужно изменить инструкцию, как показано ниже, чтобы получить изображения определенного раздела:

 List<WebElement> allImages=menu.findElements(By.tagName("img"));
  

3) Выведите печать ArrayList s из for цикла

Вывод:

 [TestNG] Running:
  C:UsersHEMAAppDataLocalTemptestng-eclipse-717955280testng-customsuite.xml

[268, 268, 268, 268]
[152, 152, 152, 152]
[http://northeastindiaholidays.com/wp-content/uploads/2014/06/Goa.gif, http://northeastindiaholidays.com/wp-content/uploads/2014/06/Puducherry_beach.jpg, http://northeastindiaholidays.com/wp-content/uploads/2014/06/Kerla.jpg, http://northeastindiaholidays.com/wp-content/uploads/2014/06/Leh.jpg]
PASSED: fetchCustKeys

===============================================
    Default test
    Tests run: 1, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================

[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@16754ffd: 469 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 1 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@21a2fefd: 303 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@391e680f: 94 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@7f7f5281: 154 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@60c4d1a7: 11 ms
  

Комментарии:

1. Привет, Hemasundar, упомянутый вами код делает то же самое — он печатает все изображения и их атрибуты, присутствующие на странице.

2. @geeko_zac Я добавил выходные данные, которые я получаю. Почему вы получаете неверный вывод. Скопируйте код правильно и повторите попытку.

3. Да, это сработало. На самом деле мой eclipse не запускал эту программу. Большое спасибо. Вы снова приходите мне на помощь. Принял это как ответ. Приветствия