gpt4 book ai didi

c# - Webdriver - Webdriver MoveToElement 在 IE 和 Firefox 中无法获取文本工具提示

转载 作者:太空宇宙 更新时间:2023-11-03 13:29:40 24 4
gpt4 key购买 nike

已尝试调用 MoveToElement 以便我可以获得特定元素的工具提示。这在 Chrome 中很好用。然而,我试图在 IE10 和 Firefox 26.0 上做同样的事情,它确实悬停了——但只是一瞬间,因此没有给我足够的时间来获得工具提示。休眠无济于事,而且我尽量避免使用 thread.sleep。我的问题:是否有另一种方法可以将鼠标悬停在某个字段或其他一些可用于查看工具提示是否出现并保留在 Firefox 和 IE 上的预期条件上?

代码片段:

    /// <summary>
/// Check to see that the hover over option for the 'Defined' column
/// exists and also to return the text for that hover over option.
/// </summary>
/// <returns></returns>
public Tuple<bool, string[]> HoverOverDefinedColumn(bool javascriptWorkaround = false)
{
Thread.Sleep(1000);
var wait = WebDriverWaitObject();
var action = new Actions(driver);
wait.Until(d => HoverOverDefinedRow);

action.MoveToElement(HoverOverDefinedRow).MoveByOffset(5, 0);
action.Build().Perform();
var isThereAnHoverOption = HoverOverOptionExists(wait);
var textDefinedForHoverOption = TextDefined(HoverOptionText);
return new Tuple<bool, string[]>(isThereAnHoverOption, textDefinedForHoverOption);
}

/// <summary>
/// Checks to see specifically if the hover over option exists.
/// </summary>
/// <param name="wait"></param>
/// <returns></returns>
private bool HoverOverOptionExists(WebDriverWait wait)
{
var hoverOverElement =
wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector("#TTipTDnetst.hintsClass")));

return IsElementPresent(hoverOverElement);
}

/// <summary>
/// Gets the text for the hover over option.
/// </summary>
/// <param name="element"></param>
/// <returns></returns>
private string[] TextDefined(IWebElement element)
{
var path = (element.Text.Split(new string[] { " » " }, StringSplitOptions.None));
return path;
}

最佳答案

正在测试 3 种不同的浏览器:(1) 火狐(2) Chrome (3) 浏览器

(1) 火狐浏览器(26.0 版)我在使用 Actions 类时仍然遇到“MoveToElement”问题。相反,我执行了一个 try/catch 处理程序,以便在操作不起作用时异常将运行 Javascript 方法来获取工具提示,如下所示:

    /// <summary>
/// This is the workaround for the hover over functionality
/// for the 'Defined' column. This (for the moment) specifically
/// applies to Firefox and its inability to get the tool tip.
/// </summary>
/// <param name="elemement"></param>
private void HoverOverWorkAround(IWebElement elemement)
{
var code = "var fireOnThis = arguments[0];"
+ "var evObj = document.createEvent('MouseEvents');"
+ "evObj.initEvent( 'mouseover', true, true );"
+ "fireOnThis.dispatchEvent(evObj);";
((IJavaScriptExecutor)driver).ExecuteScript(code, elemement);
}

(2) Chrome (v 32.017)悬停 Action 类与最新的 ChromeDriver 一样工作正常。

(3) 浏览器 10只要我有一个具有以下选项的驱动程序,这就适用于 Actions 类:

var options = new InternetExplorerOptions {RequireWindowFocus = true, EnablePersistentHover = false};instance = new InternetExplorerDriver(ApplicationSettings.DriverLocation, options);

注意:

对于 IE,'NativeEvents' 选项默认设置为 true(对于 Windows),我不去管它。

始终使用“ native 事件”意味着(在本例中)使用“ Action ”类来实现悬停功能。如果这不起作用,则捕获异常方法并运行 Javascript(与上面的 Firefox 一样)。

上述方法的推理来自以下讨论中的想法:

http://code.google.com/p/selenium/issues/detail?id=2067

关于c# - Webdriver - Webdriver MoveToElement 在 IE 和 Firefox 中无法获取文本工具提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21096297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com