我正在测试一个ASP.NET应用程序,该应用程序有很多链接在其href中调用Javascript doPostBack,如下所示:
href="javascript:__doPostBack('ctl04$ctl06$Entities','Impersonate$12345')"
Selenium WebDriver element.Click()方法仅适用于Firefox。对于IEDriverServer,单击链接后没有任何反应。
我开始使用Googling,看起来Javascript操作实际上并没有使用Click()方法调用,我可以找到的唯一建议就是像这样使用IJavaScriptExecutor(这样可行):
var js = Globals.Driver as IJavaScriptExecutor;
js?.ExecuteScript($"javascript:__doPostBack('ctl04$ctl06$Entities','Impersonate$12345')");
这在Windows 7和Windows 8.1上的IE11上都会发生。我还没有尝试过Windows 10。
是否还有其他解决方案,因为我有很多这样的链接来修改代码:( :( :(
============================================ ============================ 更新于01/22/17,其中包含更多屏幕截图和详细信息。我目前无法访问实际的应用程序代码,但如果这还不够,我可以请求访问。
这是我的测试代码,找到点击链接(没什么特别的):
当我通过这段代码进行调试时,我可以看到链接被找到并成功点击(没有例外)。屏幕还有一条围绕所述链接的虚线。此代码适用于Firefox,因此元素本身没有任何问题。但是,在Firefox中,在Click()操作之后,屏幕将按预期重新加载。在IE11中,除了虚线外没有任何事情发生。
我为IE添加了以下代码,在调用此ExcecuteScript方法之后,页面将加载预期结果。
答案 0 :(得分:1)
我尝试使用一个小的ASP.NET示例,它似乎也适用于Selenium和IE。你能更具体地了解你的pgae是什么样的吗?
这是我尝试的内容:
<div>
<asp:LinkButton runat="server" OnClick="Unnamed_Click" ID="one">test link button</asp:LinkButton>
<asp:Label runat="server" ID="label"></asp:Label>
</div>
protected void Unnamed_Click(object sender, EventArgs e) {
label.Text += "Clicked";
}
以下是生成的HTML的样子:
<a id="one" href="javascript:__doPostBack('one','')">test link button</a>
以下是测试:
driver.get("http://localhost:41058/WebForm1.aspx");
new WebDriverWait(driver, 1).until(ExpectedConditions.elementToBeClickable(By.id("one"))).click();
new WebDriverWait(driver, 1).until(ExpectedConditions.elementToBeClickable(By.id("one"))).click();
new WebDriverWait(driver, 1).until(ExpectedConditions.elementToBeClickable(By.id("one"))).click();
使用ChromeDriver和InternetExplorerDriver(在Windows 10上使用IE11)可以正常工作。
但是有一些陷阱:
__doPostBack调用实际上会在浏览器中重新加载页面,因此您无法使用之前可能已缓存的WebElement引用。换句话说,这不会起作用:
WebElement element = driver.findElement(By.id("one"));
element.click();
element.click();
因为第二个element.click()会产生StaleElementException。