C# Selenium - OpenQA.Selenium.ElementNotInteractableExceptio



我目前正在尝试使用Selenium和C#单击网页上的元素。 我需要单击基于具有文本"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# 代码,用于尝试访问应用程序名称"测试应用程序"的首次出现;

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

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

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

我认为错误可能是因为程序正在访问第二次出现的"应用程序测试",所以我尝试将div 设置为类"大"可见(显示:块;使用以下代码,但它似乎没有帮助;

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);

如果之前有人问过类似的事情,我很抱歉,我花了一段时间浏览类似的主题,但没有找到我需要的东西。 如果有人能指出我正确的方向,那将不胜感激。

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

IReadOnlyCollection<IWebElement> elems = Driver.FindElements(By.XPath("//div[.='Test App']")).Where(e => e.Displayed).ToList();
elems.ElementAt(0).Click();

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

根据您提供的 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')]"));
    

你可以通过使用类名来使用,更正代码,因为我不太了解 C 尖锐

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

你也可以使用xpath。

driver.FindElement(By.XPath(“//div[@class='small']/div[text()='Test App'])).Click();
IReadOnlyCollection<IWebElement> elems = Driver.FindElements(By.XPath("//div[.='Test App']")).Where(e => e.Displayed).ToList();
elems.ElementAt(0).Click();

正在使用它非常适合我

最新更新