Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Работа со слайдами


(Руслан) #1

Всем привет,

есть слайды, передвигающиеся каждые 2-3 секунды, необходимо выбрать нужны и проверить на наличие в нём элементов.

Сделал в Selenium IDE , перевёл в Java Webdriver -> запустил, работает (Прим 1)

////////////////////////////Прим 1

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;

import java.util.concurrent.TimeUnit;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;

public class test {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();

@Before
public void setUp() throws Exception {
        driver = new FirefoxDriver();
        baseUrl = "http://www..com/";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        }

@Test
public void test123() throws Exception {
        driver.get(baseUrl + "/");
        driver.findElement(By.xpath("//div[@id='hero-slider']/div[2]/div[2]/div/a[7]/span[2]")).click();
        assertEquals("experience the ", driver.findElement(By.xpath("//div[@id='hero-slider']/div/div[3]/div/p[2]/a/span")).getText());
        assertEquals("", driver.findElement(By.cssSelector("img[alt=\"The  Logo Hero\"]")).getText());
        driver.findElement(By.xpath("//div[@id='hero-slider']/div/div[3]/div/p[2]/a/span")).click();
        try {
        assertEquals("The   - West End  in  | The  ", driver.getTitle());
        } catch (Error e) {
        verificationErrors.append(e.toString());
        }
        }

@After
public void tearDown() throws Exception {
        driver.quit();
        String verificationErrorString = verificationErrors.toString();
        if (!"".equals(verificationErrorString)) {
        fail(verificationErrorString);
        }
        }

private boolean isElementPresent(By by) {
        try {
        driver.findElement(by);
        return true;
        } catch (NoSuchElementException e) {
        return false;
        }
        }

private boolean isAlertPresent() {
        try {
        driver.switchTo().alert();
        return true;
        } catch (NoAlertPresentException e) {
        return false;
        }
        }

private String closeAlertAndGetItsText() {
        try {
        Alert alert = driver.switchTo().alert();
        String alertText = alert.getText();
        if (acceptNextAlert) {
        alert.accept();
        } else {
        alert.dismiss();
        }
        return alertText;
        } finally {
        acceptNextAlert = true;
        }
        }
        }

///////////////

Попытался преобразовать :smile:

//////////////////// Прим 2

 @FindBy(xpath = ("//div[@id='hero-slider']/div[2]/div[2]/div/a[7]/span[2]"))
    WebElement 1_slide;

 @FindBy(xpath = ("//div[@id='hero-slider']/div[2]/div[2]/div/a[7]/span[2]"))
    WebElement 2_exp;

    public void Marylebone() throws Exception
    {
        1_slide.click();    
        Assert.assertEquals("experience the ", driver.findElement(By.xpath("//div[@id='hero-slider']/div/div[3]/div/p[2]/a/span")).getText());
        Assert.assertEquals("", driver.findElement(By.cssSelector("img[alt=\"The  Logo Hero\"]")).getText());
        2_exp.click();
        try
        {
            Assert.assertEquals("The   - West End  in  | The  ", driver.getTitle());
        } catch (Error e)
        {
            verificationErrors.append(e.toString());
        }
    } 

....


 private boolean isElementPresent(org.openqa.selenium.By by)
    {
        try
        {
            driver.findElement(by);
            return true;
        } catch (NoSuchElementException e)
        {
            return false;
        }
    }

    private boolean isAlertPresent()
    {
        try
        {
            driver.switchTo().alert();
            return true;
        } catch (NoAlertPresentException e)
        {
            return false;
        }
    }

    private String closeAlertAndGetItsText()
    {
        try
        {
            Alert alert = driver.switchTo().alert();
            String alertText = alert.getText();
            if (acceptNextAlert)
            {
                alert.accept();
            } else
            {
                alert.dismiss();
            }
            return alertText;
        } finally
        {
            acceptNextAlert = true;
        }
    }

Даже первое действие не выполняется со слайдом…
что 1_slide.click(); ,
что через driver.findElement(By.xpath("//div[@id=‘hero-slider’]/div[2]/div[2]/div/a[7]/span[2]")).click();

может где-то ошибку допустил, как обьяснить программе, что нужно найти номер слайда и нажать :slight_smile: а дальше уже проверять на наличие внутри элементов?


(Roman) #2

А разве в Java имя переменной может начинаться с цифры?


(Dmytro Makhno) #3

Уадайка?
Есть такая игра: угадайка что у меня не работает.

Давайте стектрейс и страницу и-или кусок дома и как долго он живет.
В хром консоли находит элемент
$x("//div[@id=‘hero-slider’]/div[2]/div[2]/div/a[7]/span[2]")
?

P.S. 1 и 2 затерли, а Marylebone оставили.


(Руслан) #4

это пример, дело точно не в переменных


(Руслан) #5

прекрасно находит путь


(heartwilltell) #6

Стактрейс в студию


(Руслан) #7

можно поподробней , что это? :slight_smile:


(heartwilltell) #8

Это лог ошибки которую выплевывет IDE


(Руслан) #9

В общем разобрался…нужно вылавливать путь к слайду, где он находится на момент запуска