Наведите указатель мыши на элемент и подождите с Selenium WebDriver с помощью Java

EDIT: поэтому я придумал простой способ наведения курсора на элемент, но я хочу дождаться появления результата. Chrome webdriver зависает над элементом и движется слишком быстро, чтобы я мог видеть текст. Как я могу заставить его висеть, пока не появится текст? Я посмотрел Wait () и until (), но я не могу заставить их работать должным образом (я предполагаю, что это потому, что я действительно не жду, чтобы логическое значение было истинным в коде. Если только у кого-то нет предложений?). Вот что у меня до сих пор...

WebDriver driver = getWebDriver();
By by = By.xpath("//*[@pageid='" + menuItem + "']");
Actions action = new Actions(driver);
WebElement elem = driver.findElement(by);
action.moveToElement(elem);
action.perform();

еще раз спасибо всем!

Ура.

4 ответов


вы не можете полагаться на сны, поэтому вы должны попробовать это:

WebElement myDynamicElement = (new WebDriverWait(driver, 10))
  .until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));

у вас есть много методов ExpectedConditions класса.

вот некоторая информация:

надеюсь, вы найдете это полезный.


Кажется, в тот момент, когда я был в методе, просто не ждал, пока текст станет видимым. Добавление простой функции сна к концу было именно тем, что мне нужно.

@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) {

    }
}

надеюсь, что это поможет другим в аналогичной привязке!

Ура!


У меня также есть проблема, похожая на вас.

Я решил это.

Да, я думаю, мы можем вставить задержку или использовать функцию, (...).findElements(...).size (), для лучшей производительности. Если результат функции не равна 0, то мы можем нажать или другого элемента.

согласно "https://code.google.com/p/selenium/wiki/GettingStarted "и"WebDriver: проверьте, существует ли элемент?", мы можем ввести задержку и использовать функция для определения существования элемента, который мы хотели.

// Sleep until the div we want is visible or 5 seconds is over
    long end = System.currentTimeMillis() + 5000;
    while (System.currentTimeMillis() < end) {
        List<WebElement> elements = driver.findElements(By.id("btn"));

        // If results have been returned, the results are displayed in a drop down.
        if (elements.size() != 0) {
          driver.findElement(By.id("btn")).click(); 
          break;
        }
    }

подождите, пока элемент не будет показан или время истекло~!


Ниже приведен код в C# для наведения мыши.

Actions mousehover = new Actions(driver);
IWebElement Element_Loc = driver.FindElement(By.XPath("html/body/div[1]/table/tbody/tr/td[2]/div[2]/table[2]"));
mousehover.MoveToElement(Element_Loc).Build().Perform();
string Mouse_Text = driver.FindElement(By.XPath("html/body/div[1]/table/tbody/tr/td[2]/div[2]/table[2]")).GetAttribute("alt");

Boolean booltext = Mouse_Text.Equals("your mousehover text goes here.");
Console.WriteLine(booltext);

if (booltext.Equals(true))
{
    Console.WriteLine("The text is verified and matches expected");
}
else
{
    throw new Exception(" The text does not match the expected");
}

приведенный выше код в основном использует функцию MovToElement класса действий, а затем принимает расположение элемента (xpath) и получает его атрибут, который, возможно, нравится (alt, title и т. д.), и сохраняет его в строке. Позже это значение сравнивается с текстом . Если логическое значение равно true, то тест пройден.