没有这样的元素:无法定位元素:{"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);
}
}
}
此程序将单击登录并登录并找到部分视图输入密码,但它只是将值插入用户名并单击提交但永远找不到密码。
问题是在第一页上有 username
和 clickable
按钮,一旦您单击该按钮,它会将您重定向到一个新页面,您可以在其中提供密码。
但是,这个新页面没有正确呈现,这就是你得到
的原因
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");
通过 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();
参考资料
您可以在以下位置找到一些相关的详细讨论:
我写了一个简单的登录测试
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);
}
}
}
此程序将单击登录并登录并找到部分视图输入密码,但它只是将值插入用户名并单击提交但永远找不到密码。
问题是在第一页上有 username
和 clickable
按钮,一旦您单击该按钮,它会将您重定向到一个新页面,您可以在其中提供密码。
但是,这个新页面没有正确呈现,这就是你得到
的原因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");
通过 get()
调用 url 后,填写 EmailOrPhoneNumber 字段并单击 提交 按钮 密码 字段需要一段时间才能 可见 和 可互动.
解决方案
在这些情况下,要在所需元素上调用 Click()
,您必须引入
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();
参考资料
您可以在以下位置找到一些相关的详细讨论: