簡體   English   中英

C# Selenium 無法點擊微軟登錄的登錄按鈕

[英]Unable to click Sign in button of Microsoft Login in C# Selenium

微軟登錄

嘗試單擊“登錄”按鈕但收到“陳舊元素異常錯誤”。

IWebElement email = driver.FindElement(By.XPath("//*[contains(@name,'loginfmt')]"));
            IWebElement password = driver.FindElement(By.XPath("//*[contains(@name,'passwd')]"));
            IWebElement signIn = driver.FindElement(By.XPath("//*[contains(@id,'idSIButton9')]"));
            IWebElement signInbtn = driver.FindElement(By.XPath("//*[@id='idSIButton9']"));
            IWebElement signInbtn1 = driver.FindElement(By.XPath("//input[@type='submit']"));
        

        email.SendKeys("automate@outlook.com");
        email.SendKeys(Keys.Enter);
        Thread.Sleep(1000);
        password.SendKeys("Abc*123$");
        password.SendKeys(Keys.Enter);
        signInbtn1.Click(); 

錯誤:

OpenQA.Selenium.StaleElementReferenceException:過時的元素引用:元素未附加到頁面文檔

得到StaleElementReferenceException的原因是驅動程序找到了該元素,但此時頁面刷新,您嘗試對其進行交互,因此元素 state 是陳舊的。

填寫密碼字段后嘗試初始化元素signInbtn1

password.SendKeys("Abc*123$");
password.SendKeys(Keys.Enter);
IWebElement signInbtn1 = driver.FindElement(By.XPath("//input[@type='submit']"));

signInbtn1.Click(); 

我沒有將 C# 用於測試腳本,但我通過 javascript 調用 selenium 驅動程序(在開玩笑的測試中),並且對於您提到的特定登錄模式遇到了同樣的問題。

查看開發工具中的 HTML,我發現在使用 ID(“ idSIButton9" )時存在一個微妙的問題,因為一旦輸入 email,按鈕元素就會發生變化。即。 按鈕元素的值將從“下一步”更改為“登錄”

我發現使用 id 兩次來標識相同的按鈕元素會導致元素陳舊問題。 因此,第二次,我使用以下 xpath 找到了按鈕元素

"//input[@value='Sign in']"

在這種情況下,這比 id 更具體。

希望有所幫助。

暫無
暫無

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

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