没有这样的元素:无法定位元素:{"method":"css selector","selector":"#Password"} 使用 Selenium 和 C#

no such element: Unable to locate element : {"method":"css selector","selector":"#Password"} using Selenium and C#

我写了一个简单的登录测试

namespace Seleniumtest.Customer
{
    [TestFixture]
    class LoginTest :TestBase
    {
        [Test]
        public void LoginWithPhoneNumber()
        {
            webDriver.Navigate().GoToUrl("https://test123.ifc.ir/login");
            webDriver.FindElement(By.Id("EmailOrPhoneNumber")).SendKeys("09108599423");
            webDriver.FindElement(By.ClassName("buttons")).Click();
            var input = webDriver.FindElement(By.Id("Password"));     
            Assert.That(input.Displayed, Is.True);
        }

    }
}

此程序将单击登录并登录并找到部分视图输入密码,但它只是将值插入用户名并单击提交但永远找不到密码。

问题是在第一页上有 usernameclickable 按钮,一旦您单击该按钮,它会将您重定向到一个新页面,您可以在其中提供密码。

但是,这个新页面没有正确呈现,这就是你得到

的原因
no such element: Unable to locate element : {"method":"css selector","selector":"#Password"} 

在 C#-Selenium 绑定中,您可以像下面这样使用 explicit wait

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement input = wait.Until(e => e.FindElement(By.Id("Password")));

现在输入的是web元素,可以用SendKeys方法输入密码

input.SendKeys("your password");

Reference link

通过 get() 调用 url 后,填写 EmailOrPhoneNumber 字段并单击 提交 按钮 密码 字段需要一段时间才能 可见 可互动.


解决方案

在这些情况下,要在所需元素上调用 Click(),您必须引入 for the and you can use either of the following :

  • Id:

    new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementToBeClickable(By.Id("Password"))).Click();
    
  • CssSelector:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("#Password"))).Click();
    
  • XPath:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//*[@id='Password']"))).Click();
    

参考资料

您可以在以下位置找到一些相关的详细讨论: