当开发人员工具上存在Element时,发生OpenQA.Selenium.NoSuchElementException

时间:2019-09-05 15:17:27

标签: c# selenium geckodriver

我正在尝试用Selenium填写表单,但是当元素明显存在于firefox的Developer Tools上时,我得到Unable to locate element: #PaymentMethod_FullName。我已经测试过iframe,但是没有iframe。 Firefox Developer Tools

我正在尝试:

driver.FindElement(By.Id("PaymentMethod_FullName")).SendKeys(name);

但是我已经尝试使用css选择器#PaymentMethod_FullName和XPath //*[@id='PaymentMethod_FullName'],所以我不知道为什么它不起作用。另外,该表格上的所有输入都存在此错误。预先感谢。

3 个答案:

答案 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")));,它就可以工作