C# ElementNotVisibleException尝试使用Xpath将数据输入带有Selenium的文本框

C# ElementNotVisibleException尝试使用Xpath将数据输入带有Selenium的文本框,c#,selenium,xpath,webdriver,C#,Selenium,Xpath,Webdriver,我正在使用C#中的Selenium将数据输入网页上的文本框: 但我得到了这个错误: OpenQA.Selenium.ElementNotVisibleException:元素当前不可见,因此可能无法与之交互 我正在使用@name,但是页面上有两个name=“MinPrice”控件 以下是HTML: <div class="form-group for-sale"> <label>Min Price</label> <input class

我正在使用C#中的Selenium将数据输入网页上的文本框:

但我得到了这个错误:

OpenQA.Selenium.ElementNotVisibleException:元素当前不可见,因此可能无法与之交互

我正在使用@name,但是页面上有两个name=“MinPrice”控件

以下是HTML:

<div class="form-group for-sale">
    <label>Min Price</label>
    <input class="form-control" name="MinPrice" min="0" placeholder="Minimum Price" value="" type="number"></input>
我还尝试使用XPath,但结果类似:

txtMinPrice = Driver.Instance.FindElement(By.XPath("//input[contains(@name,'MinPrice') and type='number']"));

如果有人有任何想法……这简直让我发疯。

ElementNotVisibleException当selenium可以在DOM中找到一个元素但它没有在屏幕上呈现时会发生异常

当我以前遇到这个错误时,它通常是由以下三种原因之一引起的:

硒试图与DOM中存在的对象交互,但尚未在屏幕上呈现,在这种情况下,您可能会考虑添加某种类型的延迟。(尽可能避免睡眠,但这对调试很有用)
  • 该元素位于可见屏幕下方,在这种情况下,您需要滚动以与之交互
  • 有一个重叠元素阻止了该元素的显示
  • 在中添加睡眠(10),以确保在执行任何用户操作之前先加载页面上的所有内容。如果这不起作用,还可以添加

    driver.manage().window().maximize()
    在测试开始时确保所有页面元素都在视图中

    如果这不起作用,那就是xpath。尝试类似于
    /*[@class=“form group for sale”]/input的方法


    或者使用mozilla firefox中的Firefinder加载项检查您的xpath是否有效并且是否存在于页面上。

    Selenium擅长向下滚动查看项目,但当涉及到向上滚动时,它是一个PiA,通常会引发该异常。我通常只是做一些

    element.SendKeys(Keys.Home);
    Thread.Sleep(100);
    

    可能是@AlexGravely的重复,这与这个问题无关。我尝试添加一个隐式wait和一个Sleep,但没有帮助。我将页面设置为在加载时最大化,因此元素处于视图中。而且似乎没有任何东西重叠元素,阻止它。我不知道还有什么可以尝试在调试模式下缓慢地逐步处理代码,如果出现计时问题,通常会暴露出来。如果您得到相同的异常,那么DOM中可能有它不喜欢的东西。我目前已经在使用.maximize()。尝试使用Sleep(10)和更长的时间,但它似乎仍然认为该元素是隐藏的,因此我无法与itOk进行交互。itOk是使用react.js或类似的框架隐藏class=“form group for sale”]/input的前端,直到另一个元素像按钮一样被激活?我认为我不需要向下滚动,因为该元素是可见的,在页面加载时,位于页面顶部附近。睡眠似乎没有帮助
    element.SendKeys(Keys.Home);
    Thread.Sleep(100);