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

Как навести курсор на объект не кликая на него

Добрый день.
Кто-нибудь может подсказать, как навести на объект курсор ? Ситуация такая что при наведении на объект появляется кнопка Удалить…мне надо нажать на Удалить но она не появляется так как незнаю как навести на объект
public void DeleteNoteNewPerson() throws InterruptedException {
NavigateNoteDelBTN = getDriver().findElement(By.id(“noteBody”));
NavigateNoteDelBTN.click();
DelNoteBTN = getDriver().findElement(By.linkText(“Del”));
DelNoteBTN.click();

Только в третей строке у меня клика мне надо что б оно только навело курсор на id(“noteBody”)

Такого рода не поможет?

@When("^I hover over menu item \"(.*)\"$")
public void I_hover_over_menu_item(String menuItem)
{
    WebDriver driver = getWebDriver();
    By by = By.xpath("//*[@pageid='" + menuItem + "']");
    Actions action = new Actions(driver);
    WebElement elem = driver.findElement(by);
    action.moveToElement(elem);
    action.perform();
    this.sleep(2);
}

public void sleep(int seconds) 
{
    try {
        Thread.sleep(seconds * 1000);
    } catch (InterruptedException e) {

    }
}
2 Симпатий

Смотри метод moveToElement тут: http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/interactions/Actions.html#Actions(org.openqa.selenium.interactions.Keyboard,%20org.openqa.selenium.interactions.Mouse) :slight_smile:

Спасибо. Помогло _)

Заработало … спасибо)

а может есть ещё какие-то варианты… этот тест не всегда проходит… после этой задержки он не всегда нажимает на ссылку linkText(“Del”)

может элементы не успевает появится,

попробовать либо увиличить ожидание

либо сделать проверку :smile:

if (element(test).isPresented==true)
{
 element(test).click();
}
else
{
Thread.sleep(3000);
element(test).click();
}

а “test” как мне правильно описать ?

NavigateNoteDelBTN.click(); - это и есть element(test).click;

я просто к стилю для Фукидита привык :smile:

что то не получается этим способом…((или я что-то опять не понимаю

public void I_hover_over_menu_item()
{
WebDriver driver = getDriver();
By by = By.id(“noteBody”);
Actions action = new Actions(driver);
WebElement elem = driver.findElement(by);
action.moveToElement(elem);
action.perform();
this.sleep(2);
}
public void sleep(int seconds)
{
try {
Thread.sleep(seconds * 1000);
} catch (InterruptedException e) {

    }
}

public void  DeleteNoteNewPerson() throws InterruptedException {
    DelNoteBTN = getDriver().findElement(By.linkText("Del"));
    By by = (By.linkText("Del"));
    WebElement elem = getDriver().findElement(by);
    if (DelNoteBTN.isPresented == true);
    {
       DelNoteBTN.click();
    }
    else
    {
        Thread.sleep(3000);
        DelNoteBTN.click();
    }

как мне связать два эти метода ? У меня isPresented светится красным

Не замарачивайтесь пока с этим, возможно проблема в другом. Для начала попробуйте увеличить задержку, поставьте например секунд 10.

ну , я это предлагал, как 1 из вариантов

Если интересно, вот пример :

    if (driver.findElement(By.xpath("")).isDisplayed()==true)
    {
        driver.findElement(By.xpath("")).click();
    }
    else if (driver.findElement(By.xpath("")).isDisplayed()==false)
    {
        Thread.sleep(5000);
        driver.findElement(By.xpath("")).click();
    }

Попробуй так

Хорошая статья по теме
http://internetka.in.ua/selenium-driver-wait-until/

WebDriver driver = new FirefoxDriver();
(new WebDriverWait(driver, 10))
.until(ExpectedConditions.titleContains(“MyTitle”));

я заметил что когда двигаю мышку в окне браузера в котором проходит тест, то тест не проходит потому что он не попадает по линку (By.linkText(“Del”));. Если же курсор находится за перделами браузера (или свернуть окно браузера)- тест проходит успешно. Реально ли это влияет или проблема в чём то другом ?

А почему нет? Не надо юлозить мышкой в браузере, когда идут тесты - особенно если в них есть манипуляции с мышью :slight_smile:

полность солидарен :smile: случайное действие может не так восприниматься браузером :))

Единственный выход это не трогать мышь )? других вариантов нет я так понимаю. !? )

ты выполняешь mousehover , и в этом же время ты сам двигаешь мышкой, драйвер браузера реагирует на это, и там, где ты навёл курсором - то оно и видит, что первое словит - то и выполняет

Ну почему. Можно ранать на ВМ или другой машине. Или сворачивать браузер - но это не понравится ФФ и ИЕ.