Escribí una prueba simple para iniciar sesión.
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); } } }Este programa hará clic en iniciar sesión y tendrá inicio de sesión y encontrará una contraseña de entrada de vista parcial, pero solo insertará el valor en el nombre de usuario y hará clic en enviar pero nunca encontrará la contraseña.
El problema es que en la página uno tiene un nombre de username y clickable botón en el que se puede hacer clic, y una vez que haga clic en el botón, lo redirigirá a una nueva página donde puede proporcionar la contraseña.
Sin embargo, esta nueva página no se representa correctamente y esa es la razón por la que recibe
no such element: Unable to locate element : {"method":"css selector","selector":"#Password"} En los enlaces de C#-Selenium, puede usar la explicit wait como se muestra a continuación:
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); IWebElement input = wait.Until(e => e.FindElement(By.Id("Password"))); y ahora la entrada es un elemento web, puede ingresar la contraseña con el método SendKeys .
input.SendKeys("your password");Una vez que invoque la URL a través de get() , complete el campo EmailOrPhoneNumber y haga clic en el botón Enviar , necesitará un poco de tiempo para que el campo Contraseña sea visible e interactuable .
En estos casos, para invocar Click() en el elemento deseado, debe inducir WebDriverWait para ElementToBeClickable y puede usar cualquiera de las siguientes estrategias de localización :
identificación :
new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementToBeClickable(By.Id("Password"))).Click();Selector Css :
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();Puede encontrar un par de discusiones detalladas relevantes en: