[英]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.