Selenium Click()不适用于ASP.NET LinkBut​​ton

时间:2014-09-05 09:54:33

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

我正在为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

3 个答案:

答案 0 :(得分:0)

我有一个类似的问题,其中一些控件被渲染为受到尊重而其他控件没有,所以你确定链接ID是“testtest123”吗?

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

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

答案 1 :(得分:0)

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

更上游

答案 2 :(得分:0)

一种可能性是selenium正确地单击了元素,但是linkbutton的javascript代码执行速度不足以进行其余的测试。这是因为当selenium遇到<input type="submit">标签(如asp.net按钮控件)时,它知道它必须等待表单提交才能进入下一个测试步骤。但是,链接按钮只是一个<a>标记,更糟糕的是,它有javascript作为href而不是网址。因此,回发javascript可能需要50毫秒才能执行或者其他任何东西,在这种情况下,它可能是这样的测试:

步骤n:点击链接按钮 - selenium不知道这需要多长时间,所以进入下一步

步骤n + 1:点击一些按钮 - 如果在js完成执行之前发生这种情况,那就好像步骤n根本没有发生

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

编辑:

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