【问题标题】:Selenium Click() does not work with ASP.NET LinkButtonSelenium Click() 不适用于 ASP.NET LinkBut​​ton
【发布时间】:2017-01-29 06:15:00
【问题描述】:

我正在为 ASPX 页面编写 Selenium 文本案例。我想点击这个 ASP.NET asp:LinkButton 元素:

<asp:LinkButton runat="server" OnClick="Test_Click" Text="Just try to click me" ID="testtest123"></asp:LinkButton>

在.NET生成的HTML页面中是这样的:

<a id="testtest123" href="javascript:__doPostBack(&#39;testtest123&#39;,&#39;&#39;)">Just try to click me</a>

虽然 Selenium 可以毫无问题地找到元素,但 Click() 什么也不做。我没有发现任何元素丢失异常或超时,测试用例就像点击正确触发一样继续运行。

这是单击元素的简单行;

Browser.Driver.FindElement(By.Id("testtest123")).Click();

此代码适用于其他 ASP 元素,例如按钮和文本框。我使用 C# 使用 64 位 webdriver 和 IE 11 编写测试用例。

我在这里研究了解决方案:ASP.Net LinkButton Prevent Postback Not Working - JavaScript,但它们似乎不适用于我的情况:

任何帮助将不胜感激!

编辑:我在这个网站上发布了另一个关于这个问题的帖子: https://code.google.com/p/selenium/issues/detail?id=7846&can=8&colspec=ID%20Stars%20Type%20Status%20Priority%20Milestone%20Owner%20Summary

【问题讨论】:

  • 您是否尝试过 32 位 Firefox 驱动程序以排除 Selenium 错误?
  • 那么点击LinkButton之后你的测试用例做了什么?
  • 它试图点击上面链接按钮显示的另一个按钮。
  • 问题是,Selenium 本身并没有点击链接按钮。我已经隔离了测试用例的那部分,很明显按钮没有被正确点击。当 Selenium 特别针对 asp:linkbutton 触发 Click() 方法时出现问题。
  • 我尝试了一种解决方法,直接调用生成的 javascript 回发函数,但我只是得到一个 javascript 错误。

标签: c# asp.net .net selenium selenium-webdriver


【解决方案1】:

我遇到了一个类似的问题,其中一些控件被呈现为受信任的,而另一些则没有,所以你确定链接 ID 是“testtest123”吗?

您必须将Client ID Mode 设置为静态,以使 HTML ID 与 .NET 中的相同(默认为继承,但在 web.config 中通常设置为 AutoID)。

<asp:LinkButton runat="server" OnClick="Test_Click" Text="Just try to click me" ID="testtest123" ClientIDMode ="Static"></asp:LinkButton>

【讨论】:

  • 是的,我确定 ID 是正确的。我已经检查了 HTML 输出并进行了验证。不过谢谢!
【解决方案2】:

如果呈现的 HTML 实际上是 &lt;A id=testtest123,那么这不是有效的 HTML,因为该属性的值周围没有引号。如果这是实际值,那么问题比 Selenium 更上游

【讨论】:

  • 对不起,我的错误。源 html 确实有引号。我更新了上面的源代码。
【解决方案3】:

一种可能是 selenium 正确地点击了元素,但链接按钮的 javascript 代码执行速度不够快,无法满足您接下来的测试。这是因为当 selenium 遇到&lt;input type="submit"&gt; 标记(如 asp.net 按钮控件)时,它知道它必须等待表单提交才能进入下一个测试步骤。然而,一个链接按钮只是一个&lt;a&gt; 标签,更糟糕的是,它使用javascript 作为href 而不是一个url。因此,回发 javascript 可能需要 50 毫秒才能执行,或者在这种情况下,可能会进行这样的测试:

第 n 步:单击链接按钮 - selenium 不知道这需要多长时间,因此继续下一步

第 n+1 步:点击某个按钮 - 如果这发生在 js 完成执行之前,就像第 n 步根本没有发生一样

这在 selenium 的情况下是合理的,因为它以程序的速度运行,而人类测试人员永远无法足够快地单击下一步以导致这样的问题。解决此问题的方法是添加延迟步骤,或者在单击链接按钮时设置的 javascript 变量上添加监视步骤。

编辑:

好的,那么这不是问题所在。不过,我几乎可以肯定它与 href 中的 javascript 有关,所以您可以在这里尝试答案:https://stackoverflow.com/a/18847713/1981387 吗?

【讨论】:

  • 没有下一步。此用例仅尝试单击链接按钮(那一行代码),我通过查看页面手动验证没有任何反应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
相关资源
最近更新 更多