Наведите указатель мыши на элемент и подождите с 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, то тест пройден.