#user-interface #selenium #selenium-webdriver
#пользовательский интерфейс #selenium #selenium-webdriver
Вопрос:
Я пытаюсь получить атрибуты всех изображений, которые присутствуют внутри класса section. Атрибуты изображений, которые я пытаюсь получить, следующие :
-
Высота изображения.
-
Ширина изображения
-
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 не запускал эту программу. Большое спасибо. Вы снова приходите мне на помощь. Принял это как ответ. Приветствия