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.
4 Antworten
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.
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')]"));
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();
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
Neue Fragen
c#
C # (ausgesprochen "siehe scharf") ist eine statische Typisierungsprogrammiersprache mit mehreren Paradigmen, die von Microsoft entwickelt wurde. C # -Code zielt normalerweise auf die .NET-Tools und -Laufzeiten von Microsoft ab, zu denen unter anderem .NET Framework, .NET Core und Xamarin gehören. Verwenden Sie dieses Tag für Fragen zu Code, der in der formalen Spezifikation von C # oder C # geschrieben ist.