クリックが動かない:令和時代にSelniumでIEを動かす(2)
nativeEventをfalseにする
関連記事:
令和時代にSelniumでIEを動かす(1)
クリックが動かない:令和時代にSelniumでIEを動かす(2)
------------------- ↓ 前書はここから ↓-------------------
前回の記事でIEは起動したものの、
各種エミュレーション機能がまともに動かない。
(もちろんChrome, Firefoxでは問題なく動く)
[selenium ie click]で検索してみると、
not workingの文字が乱舞している。。。
(・_・) 困った。
これでは使い物にならない。。。
こんなページがある。
Selenium2のWebDriverでIEを操作したときの問題と対応まとめ
(ノ∀`)アチャー
対処療法の嵐。
クリックの前にfocus当てるとか、
空文字を送信しておくとか、
とても使い物にならない。
さて、本当にどうにもならないのか調べてみたら、
ちょっといけるかもというのがあった。
それが
nativeEvent = false
[Selenium]の公式にあるDesiredCapabilitiesの欄にあるパラメータをいろいろ試した。
CapabilitiesってのはWebdriverに渡す起動パラメータみたいなもので、
共通部とブラウザ固有部がある。
その中の以下の三つは調べるとよく出てくる
- nativeEvents
- requireWindowFocus
- enablePersistentHover
一つ一つ切り替えながら試すと、どうやらnativeEventsが問題らしい
これを踏まえたうえで実行してみよう。
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
------------------- ↓ 本題はここから ↓-------------------
各種パッケージをインストール
npm i -D selenium-webdriver iedriver
Googleの検索をエミュレートしてみる
Googleにアクセスして検索ボックスに適当な文字列を入力
検索結果が表示されるという簡単なシナリオ。
// Generated by Selenium IDE
(async () => {
const {Builder, By, Key, until, Capabilities} = require("selenium-webdriver")
const ie = require('selenium-webdriver/ie')
let service = new ie.ServiceBuilder("node_modules/iedriver/lib/iedriver/IEDriverServer.exe")
let options = new ie.Options();
options.set('se:ieOptions', {
nativeEvents: false,
})
let driver = await new Builder()
.setIeService(service)
.forBrowser('internet explorer')
.setIeOptions(options)
.build()
let vars = {}
await driver.get('http://www.google.co.jp');
await driver.findElement(By.name("q")).click()
await driver.findElement(By.name("q")).sendKeys("Selenium", Key.RETURN)
await driver.sleep(3000)
await driver.close()
await driver.quit();
})()
実行
node searchgoogle.cjs
(´▽`)Yes!Google!
------------------- ↓ 後書きはここから ↓-------------------
ポイントはこの辺りか。
let options = new ie.Options();
options.set('se:ieOptions', {
nativeEvents: false,
})
・・・
let driver = await new Builder()
.setIeOptions(options)
検索しても全然でてこないし。
Discussion