Ich versuche gerade, mit Selen mit C # auf ein Element auf einer Webseite zu klicken. Ich muss auf ein Div-Element klicken, das auf einem untergeordneten Element basiert, das den Text 'Test App' enthält.

Hier ist das HTML-Snippet für das Objekt.

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

Und hier ist mein C # -Code, um auf das erste Erscheinungsbild des App-Namens 'Test App' zuzugreifen.

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

Wenn dies ausgeführt wird, wird eine Fehlermeldung angezeigt.

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

Ich dachte, der Fehler könnte daran liegen, dass das Programm auf das zweite Vorkommen von 'App Test' zugegriffen hat. Deshalb habe ich versucht, das div mit der sichtbaren Klasse 'big' (display: block;) mit dem folgenden Code festzulegen, aber dies ist nicht der Fall scheinen zu helfen;

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

Ich entschuldige mich, wenn etwas Ähnliches schon einmal gefragt wurde. Ich habe eine Weile in ähnlichen Themen gestöbert, aber nicht gefunden, was ich brauchte. Wenn jemand mich bitte in die richtige Richtung weisen könnte, wäre das sehr dankbar.

0
Alex M 18 Apr. 2018 im 05:39

4 Antworten

Beste Antwort

Sie können alle Elemente abrufen, sie nur auf die sichtbaren filtern und dann auf das erste (oder was auch immer) klicken.

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

Es ist auch möglich, dass Sie eine Wartezeit hinzufügen müssen, um sicherzustellen, dass ein Teil der Seite geladen wurde.

1
JeffC 18 Apr. 2018 im 05:23

Gemäß dem von Ihnen bereitgestellten HTML-Code zum Klicken auf das erste Erscheinungsbild der App mit dem Text Test-App können Sie eine der folgenden Codezeilen verwenden:

  • 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')]"));
    
0
DebanjanB 18 Apr. 2018 im 05:56

Sie können einfach verwenden, indem Sie den Klassennamen verwenden. Korrigieren Sie den Code, da ich das Cis nicht sehr gut kenne

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

Sie können auch xpath verwenden

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

Ich benutze dies, es funktioniert perfekt für mich

0
Roman Marusyk 11 Sept. 2018 im 12:34