gpt4 book ai didi

javascript - Selenium WebDriver IEDriverServer 单击链接 Javascript doPostBack

转载 作者:太空宇宙 更新时间:2023-11-04 16:07:22 25 4
gpt4 key购买 nike

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

href="javascript:__doPostBack('ctl04$ctl06$Entities','Impersonate$12345')"

Selenium WebDriver element.Click() 方法仅适用于 Firefox。对于 IEDriverServer,单击链接后没有任何反应。

我开始谷歌搜索,看起来 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。

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

============================================== ===========================已于 2017 年 1 月 22 日更新,提供更多屏幕截图和详细信息。我目前无权访问实际的应用程序代码,但如果这还不够,我可以请求访问权限。

这是我尝试单击的链接的 HTML 代码: enter image description here

这是我的测试代码,用于查找单击链接(没什么花哨的):

enter image description here

当我调试此代码时,我可以看到链接已找到并成功单击(没有异常(exception))。屏幕上还有一条虚线围绕着所述链接。这段代码可以在 Firefox 中运行,因此元素本身没有任何问题。但是,在 Firefox 中,在 Click() 操作之后,屏幕会按预期重新加载。在 IE11 中,除了那条虚线之外,什么也没有发生。

enter image description here enter image description here

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

enter image description here

就其值(value)而言,这是单击该链接后应加载的结果页面。 enter image description here

最佳答案

我用一个小的 ASP.NET 示例进行了尝试,它似乎在 Selenium 和 IE 上也能正常工作。您能更具体地介绍一下您的 pgae 是什么样的吗?

这是我尝试过的:

WebForm1.aspx

<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

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。

关于javascript - Selenium WebDriver IEDriverServer 单击链接 Javascript doPostBack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41772075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com