簡體   English   中英

Selenium WebDriver IEDriverServer 點擊鏈接 Javascript doPostBack

[英]Selenium WebDriver IEDriverServer Click Link Javascript doPostBack

我正在測試一個 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。

有沒有其他解決方案,因為我有很多這樣的鏈接來修改代碼:( :( :(

================================================== ====================== 17 年 1 月 22 日更新了更多截圖和細節。 我目前無法訪問實際的應用程序代碼,但如果這還不夠,我可以請求訪問。

這是我試圖點擊的鏈接的 HTML 代碼: 在此處輸入圖片說明

這是我的測試代碼,用於查找單擊鏈接(沒什么特別的):

在此處輸入圖片說明

當我調試這段代碼時,我可以看到鏈接被找到並成功點擊(沒有例外)。 屏幕上還有一條虛線環繞所述鏈接。 此代碼適用於 Firefox,因此元素本身沒有問題。 但是,在 Firefox 中,在 Click() 操作之后,屏幕會按預期重新加載。 在 IE11 中,除了虛線之外什么也沒有發生。

在此處輸入圖片說明 在此處輸入圖片說明

我為IE添加了以下代碼,在調用這個ExcecuteScript方法后,頁面加載了預期的結果。

在此處輸入圖片說明

值得一提的是,這是單擊該鏈接后應加載的結果頁面。 在此處輸入圖片說明

我用一個小的 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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM