私はまだ学習中であり、私の質問の1つに答えて: here 、問題の要素が表示されていないため、当然のことだと言われました。
私はドキュメントとSOを見て、ここに最も関連する答えがありました: 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 not definedと表示されます。
これは、関連するモジュールをインポートしていないためだと思います。誰かが私がインポートすることになっているものを指摘できますか?
編集:alecxeが指摘したように、これはJavaコードでした。
しかし、しばらくの間、それを理解しようとした直後です。 WebElementのインポート方法を見つけました:
from Selenium.webdriver.remote.webelement import WebElement
私のような人を助けるかもしれません。
それの方法も良い教訓です、IMO:
行った: ドキュメント
class Selenium.webdriver.remote.webelement.WebElement(parent, id_, w3c=False)
上記のコマンド形式に分離する必要があります。
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)
違いに興味がある場合:
質問に対する直接的な回答ではありません(Actions
についてではありません)が、必要な要素まで簡単にスクロールすることもできます。
element = driver.find_element_by_id('some_id')
element.location_once_scrolled_into_view
これは実際にはページ上の要素の座標(x
、y
)を返すことを意図していますが、ターゲット要素まで右にスクロールダウンします
move_to_element()
およびscrollIntoView()
に加えて、ビューの要素をcenterにしようとする次のコードをポーズしたかったのです。
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)
execute_javascript
メソッドを介してjavascriptを使用して、要素までスクロールできます。たとえば、ロボットフレームワークで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"});'
)