C#Selenium - OpenQA.Selenium.ElementNotInteractableException - 无法将元素滚动到视图

时间:2018-04-18 02:39:21

标签: c# selenium

我目前正在尝试使用带有C#的selenium单击网页上的元素。我需要根据具有文本'Test App'的子元素单击Div元素。

以下是该对象的HTML代码段;

<div class="application_items">
    <a href="www.google.com" target="_self">
        <div class="homePageItems">
           <div class="small" style="display: block;">
               <div class="AppLabel">Test App</div>
           </div>
           <div class="big" style="display: none;">
               <div class="AppLabel">Test App</div>
                   <div class="underTitle"></div>
           </div>
       </div>
   </a></div>

这是我的C#代码,尝试访问应用程序名称'Test App'的第一次出现;

Element(By.XPath("//div[@class='small']/*[text()[contains(., 'Test App')]]"));

当这个运行时,我收到一个错误;

OpenQA.Selenium.ElementNotInteractableException: 'Element <div class="AppLabel"> could not be scrolled into view'

我认为错误可能是因为该程序正在访问“App Test”的第二次出现,所以我尝试使用以下代码将“big”类设置为div(display:block;),但是似乎没有帮助;

IWebElement elem = Driver.FindElement(By.XPath("//div[@class='small']/div[text()[contains(., 'Test App')]]"));

String js = "arguments[0].style.height='auto'; arguments[0].style.display='block';";

((IJavaScriptExecutor)Driver).ExecuteScript(js, elem);

我很抱歉,如果之前有过与此相似的内容,我花了一段时间浏览类似的主题,但没找到我需要的东西。如果有人能指出我正确的方向,那将非常感激。

4 个答案:

答案 0 :(得分:1)

您可以获取所有元素,将其过滤为仅显示的元素,然后单击第一个(或其他)元素。

{{1}}

您还可能需要添加等待以确保页面的一部分已加载。

答案 1 :(得分:0)

你可以通过使用classname来狡猾地使用,更正代码因为我不太了解C sharp

driver.FindElement(By.ClassName("AppLabel")).Click();

您也可以使用xpath

driver.FindElement(By.XPath(“//div[@class='small']/div[text()='Test App'])).Click();

答案 2 :(得分:0)

根据您提供的HTML,点击应用的第一个外观,文字为测试应用,您可以使用以下任意一行代码:

  • CssSelector

    Element(By.CssSelector("div.homePageItems > div.small > div.AppLabel"));
    
  • XPath

    Element(By.XPath("//div[@class='homePageItems']/div[@class='small']/div[@class='AppLabel' and contains(., 'Test App')]"));
    

答案 3 :(得分:0)

b=map (f2 . read . f1 ) a

我正在使用它对我来说是完美的