t.me/atinfo_chat Telegram группа по автоматизации тестирования

Фиксирование наведения мыши на объект


(Alena) #1

На сайте http://hotels24.ua/hotels/%D0%B3%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B8%D1%86%D1%8B-%D0%BE%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C/%D0%9A%D0%B8%D0%B5%D0%B2%D1%81%D0%BA%D0%B0%D1%8F/ в header есть pop-up menu Гостиницы (1549).

При наведении мышкой данное меню открывается и выводит список ссылок.

Есть прога для тестирования данного функционала

package com.example.tests;

import com.thoughtworks.selenium.Selenium;
import com.thoughtworks.selenium.SeleneseTestCase;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverBackedSelenium;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.regex.Pattern;

public class H_14_03 extends SeleneseTestCase {
    @Before
    public void setUp() throws Exception {
        WebDriver driver = new FirefoxDriver();
        String baseUrl = "http://hotels24.stage/";
        selenium = new WebDriverBackedSelenium(driver, baseUrl);
    }

    @Test
    public void testH_14_03() throws Exception {
        selenium.open("/hotels/%D0%B3%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B8%D1%86%D1%8B-%D0%BE%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C/%D0%9A%D0%B8%D0%B5%D0%B2%D1%81%D0%BA%D0%B0%D1%8F/");
        selenium.click("link=Киев");
        selenium.waitForPageToLoad("30000");
        verifyTrue(selenium.isTextPresent("Гостиницы Киева"));
    }

    @After
    public void tearDown() throws Exception {
        selenium.stop();
    }
}
 

К сожалению  она не работает. Вся проблема в том что Selenium не учитывает момент наведения мышки на меню. В результате программа пытается найти "link=Киев" на странице сайта и естетсвенно не находит.

Подскажите, пожалуйста, как исправить данное упущение.

 


(user12) #2

Алена, я уже писал ответ на S-t.

http://software-testing.ru/forum/topic/23359/page__p__107413#entry107413

Надеюсь меня Поляруш не забанит за ссылку ^^

 


(Mykhailo Poliarush) #3

а чего я должен банить, но надо было решение сюда тоже вставить :)

Actions builder = new Actions(driver);    
        builder.moveToElement(driver.findElement(By.xpath("//div[@class='layout-header-top']//span[text()='Гостиницы Украины']"))).build().perform();
    
    
         driver.findElement(By.linkText("Винница")).click();

(devnull) #4

а можно просто заюзать mouseOver и передать туда локаторчик css=.brcrumbs-link-left 

 

з.ы. по поводу локаторы - не воевать =) это чисто для примера


(Alena) #5

Алена, я уже писал ответ на S-t.

http://software-testing.ru/forum/topic/23359/page__p__107413#entry107413

Переделала под свой код. Получилась строчка:

builder.moveToElement(driver.findElement(By.xpath("//div[@class='hotel-item-info-rating']//span[text()='все, кроме того, что не понравилось']"))).build().perform();

Но она к сожалению не работает. Подскажите может что с путями не так?


(user12) #6

вообще ничего не понял

Выложите код, чтобы я мог разобраться

Специально тестил, мышка наводится на "Гостиницы Украины" и потом кликает на "Винницу"

И что значит "все, кроме того, что не понравилось" ??? ))

скорее всего Xpath неверный


(Alena) #7

Извиняюсь бросила строку не из той задачи.

Вот полный код уже правильной задачи

package com.example.tests;

import com.thoughtworks.selenium.Selenium;
import com.thoughtworks.selenium.SeleneseTestCase;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverBackedSelenium;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
import java.util.NoSuchElementException;


public class H_13_03 extends SeleneseTestCase {
    private WebDriver driver;
    private String baseUrl;
    private StringBuffer verificationErrors = new StringBuffer();
    @Before
    public void setUp() throws Exception {
        driver = new FirefoxDriver();
        baseUrl = "http://hotels24.stage/";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }

    @Test
    public void testH_13_03() throws Exception {
        driver.get(baseUrl + "/hotels/%D0%B3%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B8%D1%86%D1%8B-%D0%BE%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C/%D0%9A%D0%B8%D0%B5%D0%B2%D1%81%D0%BA%D0%B0%D1%8F/");
        Actions builder = new Actions(driver);
        builder.moveToElement(driver.findElement(By.xpath("//div[@class='layout-header-bottom']//span[text()='Гостиницы']"))).build().perform();
        driver.findElement(By.linkText("Винницкая")).click();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    
    }
@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;
    }
}
}
На сайте есть несколько  pop-up menu. В данном случае меня интересует именно то что находится в header в левом нижнем углу "Гостиницы (1524)"


(devnull) #8

так, а что н етак с моим вариантом то? Очень интересно


(Alena) #9

Если я Вас правильно поняла то код должен выглядеть примерно так:

package com.example.tests;

import com.thoughtworks.selenium.Selenium;
import com.thoughtworks.selenium.SeleneseTestCase;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverBackedSelenium;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.regex.Pattern;

public class _19 extends SeleneseTestCase {
    @Before
    public void setUp() throws Exception {
        WebDriver driver = new FirefoxDriver();
        String baseUrl = "http://hotels24.stage/";
        selenium = new WebDriverBackedSelenium(driver, baseUrl);
    }

    @Test
    public void test_19() throws Exception {
        selenium.open("/?target=search&event=hotel&region_id=1222&city=%D0%9A%D0%B8%D0%B5%D0%B2&search_date_begin=16.07.2012&search_date_end=17.07.2012&max_persons=2");
        selenium.mouseOver("css=span.brcrumbs-link-left");
        selenium.click("link=Винницкая");
        selenium.waitForPageToLoad("30000");
    }

    @After
    public void tearDown() throws Exception {
        selenium.stop();
    }
}
 

К сожалению он так же не работает(((

Элемент   "link=Винницкая" - не найден.