Ich lerne noch und beantworte eine meiner Fragen: Hier wurde mir gesagt, dass dies möglicherweise daran liegt, dass das betreffende Element nicht in Sicht ist.
Ich habe die Dokumentation durchgesehen und SO, hier war die relevanteste Antwort: hier
Mit der Klasse "org.openqa.selenium.interactions.Actions" können Sie zu einem Element wechseln:
WebElement element = driver.findElement(By.id("my-id"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
## actions.click();
actions.perform();
Wenn ich versuche, das Obige zu verwenden, um zum Element zu scrollen: Es heißt, WebElement ist nicht definiert.
Ich denke, das liegt daran, dass ich das entsprechende Modul nicht importiert habe. Kann jemand darauf hinweisen, was ich importieren soll?
Bearbeiten: Wie von alecxe hervorgehoben, war dies Java-Code.
Aber in der Zwischenzeit gleich nach dem Versuch, es für einige Zeit herauszufinden. Ich habe die Importmethode für WebElement herausgefunden:
from selenium.webdriver.remote.webelement import WebElement
Könnte jemandem wie mir helfen.
Das Wie ist auch eine gute Lektion, IMO:
Ging zu: Dokumentation Die
class selenium.webdriver.remote.webelement.WebElement(parent, id_, w3c=False)
Muss in das oben erwähnte Befehlsformular getrennt werden.
for
ausführen. Ich denke darüber nach, eine Schleife zu verwenden. Wäre das ein guter Ansatz?move_to_element(ele).perform()
einfach zu einem Element gescrollt, auch wenn das Element gerade nicht angezeigt wird?Es ist keine direkte Antwort auf eine Frage (es geht nicht darum
Actions
), aber es ermöglicht Ihnen auch, einfach zum gewünschten Element zu scrollen:element = driver.find_element_by_id('some_id') element.location_once_scrolled_into_view
Dies beabsichtigt tatsächlich, Ihnen die Koordinaten (
x
,y
) des Elements auf der Seite zurückzugeben, aber auch nach rechts zum Zielelement zu scrollenquelle
()
hinterher angehängt und Fehler '' dict 'Objekt ist nicht aufrufbar', ich habe überprüft, ob der Elementtyp istWebElement
. dann habe ich entfernt()
und gearbeitet. Ist das nicht eine Methode? Ich meine, warum keine()
Notwendigkeit?location_once_scrolled_into_view
, um zu erklären, warum()
nicht benötigt: selenium / webelement.py bei d3b6ad006bd7dbee59f8539d81cee4f06bd81d64 · SeleniumHQ /Zusätzlich zu
move_to_element()
undscrollIntoView()
ich wollte den folgenden Code stellen , die Versuche zu zentrieren das Element in der Ansicht:desired_y = (element.size['height'] / 2) + element.location['y'] window_h = driver.execute_script('return window.innerHeight') window_y = driver.execute_script('return window.pageYOffset') current_y = (window_h / 2) + window_y scroll_y_by = desired_y - current_y driver.execute_script("window.scrollBy(0, arguments[0]);", scroll_y_by)
quelle
Es gibt eine weitere Option, um die Seite zum gewünschten Element zu scrollen, wenn das Element ein
"id"
Attribut hatWenn Sie zur Seite navigieren und mit zum Element nach unten scrollen möchten
@id
, können Sie dies automatisch durch Hinzufügen#element_id
zur URL tun ...Beispiel
Angenommen, wir müssen zur Dokumentation zu Selenium Waits navigieren und die Seite nach unten zum Abschnitt "Implicit Wait" scrollen. Wir können es tun
driver.get('https://selenium-python.readthedocs.io/waits.html')
und Code zum Scrollen hinzufügen ... ODER verwenden
driver.get('https://selenium-python.readthedocs.io/waits.html#implicit-waits')
um zur Seite zu navigieren UND Seite automatisch zum Element mit
id="implicit-waits"
(<div class="section" id="implicit-waits">...</div>
) zu scrollenquelle
Sie können mit Javascript über die
execute_javascript
Methode zum Element scrollen . Hier ist zum Beispiel, wie ich es mit SeleniumLibrary auf Robot Framework mache:web_element = self.selib.find_element(locator) self.selib.execute_javascript( "ARGUMENTS", web_element, "JAVASCRIPT", 'arguments[0].scrollIntoView({behavior: "instant", block: "start", inline: "start"});' )
quelle
Dies kann mit driver.execute_script () erfolgen: -
driver.execute_script("document.getElementById('myelementid').scrollIntoView();")
quelle
Beispiel:
driver.execute_script("arguments[0].scrollIntoView();", driver.find_element_by_css_selector(.your_css_selector))
Dieser funktioniert bei mir immer für jede Art von Selektoren. Es gibt auch die Actions-Klasse, aber für diesen Fall ist sie nicht so zuverlässig.
quelle