【问题标题】:IWebElement crashes after click is executed, but only in IE after a page load执行单击后 IWebElement 崩溃,但仅在页面加载后在 IE 中崩溃
【发布时间】:2019-09-25 19:53:21
【问题描述】:

我有一个包装器来处理在浏览器中被点击的元素(它包含WebDriverWait)。最后一步是 element.Click()。此代码在测试期间成功用于多个元素,但是,当单击转换到另一个页面的标签时,IE 驱动程序会抛出此异常:

“OpenQA.Selenium.WebDriverException”类型的异常发生在 WebDriver.dll 但未在用户代码中处理

附加信息:对远程 WebDriver 的 HTTP 请求 URL 的服务器 http://localhost:52368/session/fa3cb036-bbff-45b7-b914-03ed03c86d9c/element/bc89665f-94c3-4829-beee-cff4a106cf87/click 60 秒后超时。

奇怪的是点击成功完成,页面转换发生了,但驱动程序似乎在该点击函数中寻找其他东西。内部异常是:

{“请求被中止:操作超时。”}

它的堆栈跟踪是:

在 OpenQA.Selenium.Remote.HttpCommandExecutor.MakeHttpRequest(HttpRequestInfo 请求信息)在 OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(命令 commandToExecute) 在 OpenQA.Selenium.Remote.DriverServiceCommandExecutor.Execute(命令 commandToExecute) 在 OpenQA.Selenium.Remote.RemoteWebDriver.Execute(字符串 driverCommandToExecute,Dictionary`2 参数)在 OpenQA.Selenium.Remote.RemoteWebElement.Click()

我按照步骤设置 IE 11 here,并从 here 下载了 3.8 版本的驱动程序(能够在 32 位版本的 3.9 上重现)。

什么

【问题讨论】:

  • 它正在导航的页面是否有 iframe?
  • 也许可以帮上忙:stackoverflow.com/questions/22322596/….
  • @RyanWilson 它确实有 iframe,但为了清楚起见,我没有点击 iframe。
  • @mtheriault。我看过那篇文章,不幸的是,我无法将任何答案改编为 IE 并使其成功运行。我的问题有点不同,因为浏览器没有冻结并且预期的点击成功,但 Selenium 似乎并不相信这种情况。
  • @Kolichikov 可能是内置的 Selenium WebDriverWait 无法识别帧加载,或者它正在等待帧完全加载以评估为真。如果我是你,在这种情况下,我只会点击带有 javascript 注入器的链接,然后等到你需要在新页面上操作或评估的下一个元素存在。

标签: c# unit-testing selenium webdriver


【解决方案1】:

我使用 Selenium.Interactions 解决了这个问题,例如,如果你想点击元素:

var seleniumdriver = new InternetExplorerDriver();
Selenium.Intercactions.Action action = new Action(seleniumdriver);

action.MoveToElement(seleniumdriver.FindElement("your element")).Click().Perfom();

有时,如果它不关注当前对象,则此解决方案不起作用。 主要信息可以访问:https://seleniumhq.github.io/selenium/docs/api/dotnet/html/T_OpenQA_Selenium_Interactions_Actions.htm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-26
    • 2015-03-31
    • 2020-02-10
    • 2015-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多