我正在尝试用Selenium填写表单,但是当元素明显存在于firefox的Developer Tools上时,我得到Unable to locate element: #PaymentMethod_FullName
。我已经测试过iframe,但是没有iframe。
我正在尝试:
driver.FindElement(By.Id("PaymentMethod_FullName")).SendKeys(name);
但是我已经尝试使用css选择器#PaymentMethod_FullName
和XPath //*[@id='PaymentMethod_FullName']
,所以我不知道为什么它不起作用。另外,该表格上的所有输入都存在此错误。预先感谢。
答案 0 :(得分:0)
引出WebDriverWait
并等待ElementToBeClickable
。希望这会起作用
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.Id("PaymentMethod_FullName"))).SendKeys(name);
OR
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.Xpath("//fieldset[@class='payment-methods required-form']//ol[@class='form credit label-positioned']//li//input[@id='PaymentMethod_FullName']"))).SendKeys(name);
答案 1 :(得分:0)
所需元素是动态元素,因此您必须为所需的 ElementToBeClickable 诱导 WebDriverWait ,并且可以使用以下任一Locator Strategies:>
CssSelector
:
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("input.tooltip#PaymentMethod_FullName"))).SendKeys(name);
XPath
:
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//input[@class='tooltip' and @id='PaymentMethod_FullName']"))).SendKeys(name);
您可以在Selenium “selenium.common.exceptions.NoSuchElementException” when using Chrome
中找到详细的讨论
答案 2 :(得分:-1)
编辑:这是一个iframe,我只是傻瓜
只需driver.SwitchTo().Frame(driver.FindElement(By.Id("ID OF THE IFRAME HERE")));
,它就可以工作