繁体   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