我仍然在学习并回答我的一个问题:here,我被告知它可能是因为所讨论的元素不在视野中。
我浏览了文档,所以这是最相关的答案:here
您可以使用" org.openqa.selenium.interactions.Actions"移动到元素的类:
WebElement element = driver.findElement(By.id("my-id"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
## actions.click();
actions.perform();
当我尝试使用上面的内容滚动到元素时: 它说WebElement没有定义。
我认为这是因为我没有导入相关模块。有人可以指出我应该导入的内容吗?
编辑: 正如alecxe所指出的,这是java代码。
但与此同时,在试图弄清楚一段时间之后。我找到了WebElement的导入方法:
from selenium.webdriver.remote.webelement import WebElement
可以帮助像我这样的人。
它如何也是一个很好的教训,IMO:
class selenium.webdriver.remote.webelement.WebElement(parent, id_, w3c=False)
需要分成上面提到的命令格式。
答案 0 :(得分:69)
您正在尝试使用Python运行Java代码。在Python / Selenium中,org.openqa.selenium.interactions.Actions
反映在ActionChains
class:
from selenium.webdriver.common.action_chains import ActionChains
element = driver.find_element_by_id("my-id")
actions = ActionChains(driver)
actions.move_to_element(element).perform()
或者,您也可以通过scrollIntoView()
“滚动到视图”:
driver.execute_script("arguments[0].scrollIntoView();", element)
如果您对这些差异感兴趣:
答案 1 :(得分:29)
这不是问题的直接答案(它不是关于Actions
),但它也允许您轻松滚动到所需的元素:
element = driver.find_element_by_id('some_id')
element.location_once_scrolled_into_view
这实际上打算返回页面上元素的坐标(x
,y
),但也向下向右滚动到目标元素
答案 2 :(得分:1)
除了move_to_element()
和scrollIntoView()
之外,我还想提出以下代码,尝试在视图中居中元素>
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)
答案 3 :(得分:1)
示例:
driver.execute_script("arguments[0].scrollIntoView();", driver.find_element_by_css_selector(.your_css_selector))
这个总是适用于任何类型的选择器。 还有 Actions 类,但对于这种情况,它不是那么可靠。
答案 4 :(得分:0)
您可以通过execute_javascript
方法使用javascript滚动到该元素。
例如,这是我在Robot Framework上使用SeleniumLibrary的方法:
web_element = self.selib.find_element(locator)
self.selib.execute_javascript(
"ARGUMENTS",
web_element,
"JAVASCRIPT",
'arguments[0].scrollIntoView({behavior: "instant", block: "start", inline: "start"});'
)
答案 5 :(得分:0)
这可以使用driver.execute_script()完成:-
driver.execute_script("document.getElementById('myelementid').scrollIntoView();")
答案 6 :(得分:-1)
还有另一个选项可将页面滚动到所需元素如果元素具有"id"
属性
如果您想导航到页面并使用@id
向下滚动到元素,则可以通过向URL添加#element_id
来自动完成...
示例
比方说,我们需要导航到Selenium Waits文档,并将页面向下滚动到“隐式等待”部分。我们可以做到
driver.get('https://selenium-python.readthedocs.io/waits.html')
并添加滚动代码...或使用
driver.get('https://selenium-python.readthedocs.io/waits.html#implicit-waits')
导航到页面,并使用id="implicit-waits"
(<div class="section" id="implicit-waits">...</div>
)自动滚动页面到元素