首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium WebDriver IEDriverServer单击Link Javascript doPostBack

Selenium WebDriver IEDriverServer单击Link Javascript doPostBack
EN

Stack Overflow用户
提问于 2017-01-20 20:44:30
回答 1查看 1.9K关注 0票数 1

我正在测试一个ASP.NET应用程序,它有很多链接,它们在href中调用Javascript doPostBack,如下所示:

代码语言:javascript
复制
href="javascript:__doPostBack('ctl04$ctl06$Entities','Impersonate$12345')"

Selenium WebDriver element.Click()方法仅适用于Firefox。对于IEDriverServer,点击链接后什么都不会发生。

我开始在Googling上搜索,看起来Javascript操作实际上不是用Click()方法调用的,我能找到的唯一建议就是像这样使用IJavaScriptExecutor (这很有效):

代码语言:javascript
复制
var js = Globals.Driver as IJavaScriptExecutor;
js?.ExecuteScript($"javascript:__doPostBack('ctl04$ctl06$Entities','Impersonate$12345')");

这种情况发生在Windows7和Windows8.1的IE11上。我还没试过Windows 10。

还有其他的解决方案吗?因为我有这么多这样的链接来修改代码:(:

========================================================================更新了01/22/17和更多的截图和细节。我目前无法访问实际的应用程序代码,但是如果这还不够,我可以请求访问。

这是我试图单击的链接的HTML代码:

这是我的测试代码,可以找到一个点击链接(没什么特别的):

当我通过这段代码进行调试时,我可以看到找到并成功地单击了链接(没有异常)。所述屏幕还具有围绕所述链接的虚线。这段代码适用于Firefox,因此元素本身没有什么问题。但是,在Firefox中,在Click()操作之后,将按预期重新加载屏幕。在IE11中,除了虚线之外,什么都不会发生。

我为IE添加了以下代码,在调用此ExcecuteScript方法之后,页面将加载预期的结果。

至于它的价值,这是得到的页面,应该加载后,该链接被点击。

EN

回答 1

Stack Overflow用户

发布于 2017-01-21 16:29:40

我用一个小的ASP.NET示例尝试了这一点,它似乎也适用于Selenium和IE。你能对你的长相更具体些吗?

以下是我尝试过的:

WebForm1.aspx

代码语言:javascript
复制
<div>
  <asp:LinkButton runat="server" OnClick="Unnamed_Click" ID="one">test link button</asp:LinkButton>
  <asp:Label runat="server" ID="label"></asp:Label>
</div>

WebForm1.aspx.cs

代码语言:javascript
复制
protected void Unnamed_Click(object sender, EventArgs e) {
  label.Text += "Clicked";
}

生成的HTML如下所示:

代码语言:javascript
复制
<a id="one" href="javascript:__doPostBack('one','')">test link button</a>

下面是一个测试:

代码语言:javascript
复制
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引用。换句话说,这是行不通的:

代码语言:javascript
复制
WebElement element = driver.findElement(By.id("one"));

element.click();
element.click();

因为第二个element.click()将产生一个StaleElementException。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41772075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档