有一套可在chrome和IE 10中运行但无法在IE 11中运行的网络驱动程序测试。

单击按钮作为以下操作,该测试在IE-11中失败(一种形式弹出)。我无法手动重复此操作,而这似乎仅在IE-11中发生。查找按钮或单击按钮时不会引发异常。这是一个间歇性错误,因为有时单击会起作用,并且测试会运行。

我可以在单击发生之前明确等待,然后才能运行测试。

该按钮始终存在于DOM中(以后不会由javascript添加)。

我还添加了一个检查,以便直到最终,网络驱动程序才会开始与页面进行交互(单击)初始javascript已在页面上运行完毕。这是通过最后一个javascript设置标志来完成的。

有人遇到过类似的问题吗?

编辑
我不想等待测试代码。只需将它们放入调试不起作用的地方

评论

我发现间歇性IE错误通常是页面加载(您的里程可能有所不同)。如果在页面上使用页面对象模型,可以在单击之前将元素作为对象并进行验证吗?我获得了比等待更好的成功。

我正在使用页面对象模型并在尝试单击它之前捕获了一个WebElement ...

除了IE的脆弱性之外,如果找不到明显的错误,请打开日志记录,看看是否有任何东西。我一直都有IE测试失败并通过重新运行的情况,这是自动化最严重的部分之一,有时测试由于某些显而易见的原因会失败

我认为阅读IE10和IE11之间的差异可能会有所帮助。 msdn.microsoft.com/library/ie/dn384059这不是快速阅读,但似乎应用程序中的某些内容在两者与Selenium之间的处理方式有所不同。您可以在IE11和IE10中查找控件的用法,并查看可能存在的差异。这是我不使用等待即可想到的最佳途径...然后您可能仍会等待,因为您可能无法修复应用程序。
对于OP,您是如何做到这一点的。我正面临类似的问题

#1 楼

检查此代码。它在IE中正常工作。您只需设置一些功能即可。

DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();

ieCapabilities.setCapability("nativeEvents", false);    
ieCapabilities.setCapability("unexpectedAlertBehaviour", "accept");
ieCapabilities.setCapability("ignoreProtectedModeSettings", true);
ieCapabilities.setCapability("disable-popup-blocking", true);
ieCapabilities.setCapability("enablePersistentHover", true);

driver = new InternetExplorerDriver(ieCapabilities);


评论


可能是弹出窗口阻止功能?

– Yamikuronue
15年5月15日在12:30

这为我产生了一个构建错误,它期望一个字符串用于重载。这为其他人建造吗?

–DEnumber50
16年11月8日在18:33

#2 楼

我个人将等待,然后在等待中尝试单击,然后验证弹出窗口是否存在,捕获错误,然后尝试单击并再次验证。这样,一旦准备就绪,它将返回并且您不使用计时器。无论如何,这都是一个好习惯,不仅要等待特定的时间,还要等待特定的事件发生然后继续进行。

评论


我明白你的意思了。单击并查看是否显示弹出窗口,如果没有,则再次单击。然后,我担心的是它可能会隐藏按钮无法正常工作的其他问题。

–琼·达菲(Jon Duffy)
2014年8月21日在9:44

是的,您需要等待所有这些。在此期间可能记录任何“已知”问题……尽管不要每次都记录日志,否则您的日志可能会长得很长。但是您可以添加所需的任何内容,以确保弹出执行部分中的所有功能都是准确的。然后再返回常规测试。我知道这可行,但是您必须确保所有鸭子都排成一排。如果您对某些特定的内容感到紧张并希望获得指导,请使用该新信息更新您的问题。

– Mutt
2014年8月21日在12:09

因此,为了澄清一下,您是否建议测试应该尝试完成,并且应该记录问题中的任何“异常行为”。也许这应该是另一个问题,但是,您如何以及何时决定将时间花在“记录”与开发新测试等问题上?

–琼·达菲(Jon Duffy)
14年8月21日在14:58

我想将其作为一个单独的问题,并提供该问题的更多细节。涉及大量的变量,并且大多数变量将特定于您的测试/目标/报告/要求/等...通常,对于每次运行,测试最好尽其所能,并记录/报告特定问题运行时。这将帮助很多,而不仅仅是每个失败的测试都失败,然后必须手动执行以查找问题并解决问题。

– Mutt
2014年8月21日在15:55

#3 楼

对于Selenium 3.0.1,我按如下进行设置,并且适用于IE11。

InternetExplorerOptions caps = new InternetExplorerOptions();
caps.IgnoreZoomLevel = true;
caps.EnableNativeEvents = false;
caps.InitialBrowserUrl = "http://localhost";
caps.UnexpectedAlertBehavior = InternetExplorerUnexpectedAlertBehavior.Accept;
caps.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
caps.EnablePersistentHover = true;        
IWebDriver driver = new InternetExplorerDriver(caps);


#4 楼

单击页面下的细分,然后单击元素时,我也遇到相同的问题,但无法单击。我有一个对我有用的解决方案,希望下面的答案也对您有用。
添加代码段。

DesiredCapabilities caps = DesiredCapabilities.internetExplorer();
caps.setCapability("ignoreZoomSetting", true);

// Setting attribute nativeEvents to false enable click button in IE
caps.setCapability("nativeEvents",false);
WebDriver driver = new  InternetExplorerDriver(caps);


这将使IE变淡浏览器的本机元素。据我所知,原生元素,即禁用通常在点击事件中显示的Java脚本。
请尝试一下,如果有更好的建议可以在此处进行更新,请在此进行更新。

#5 楼

您可以尝试使用JS单击它,

JavaScriptLibrary.CallEmbeddedSelenium(driver, "triggerMouseEventAt", element, "click", "0,0");


我想如果禁用本机事件会使测试的其他部分停止,用js单击可能是解决方法,它确实至少为我工作

#6 楼

请尝试以下步骤:


在Windows中打开显示设置(右键单击桌面,选择“显示设置”)
设置选项“更改文本,应用程序和其他项目的大小”达到100%。

完成此步骤后,Click()方法应该可以使用。

#7 楼

我尝试了javascript click,它对我有用。希望它也对您也有用:

WebElement we = driver....
((JavascriptExecutor) driver).executeScript("arguments[0].click();",we)


如果您要单击任何链接或按钮,可以使用此

#8 楼

一种解决方法是将此硒与Sikuli一起使用。这样,您可以模拟真正的鼠标单击。

http://www.devengineering.com/blog/testing/how-integrate-sikuli-script-selenium-webdriver

Sikuli是一个强大而强大的工具,可以自动化和测试用户界面屏幕截图。 Sikuli Script的核心是用Java编写的,这意味着您可以将Sikuli Script用作Selenium的标准JAVA库。上面的链接显示了有关如何执行此操作的详细信息。

评论


您能否进一步阐明您的答案,以便它专门针对此问题而量身定制。尽管链接是相关的,但是您可以在答案中包含特定信息吗?

– ECiurleo
16/12/19在9:26