node.jsでseleniumを使ってコードを書くことになったのですが(初心者ながら...)、
非同期処理の中で非同期処理が必要なケースが出てきました。
今までc++ばかりだったので非同期処理に慣れておらず、無茶苦茶な書き方になっていますが、アドバイスいただけると幸いです。
やりたいこととしては、hoge関数内の処理を、上から順番に処理をさせたいです。
実行すると、if文の処理が終わる前にreturnされてしまいます。
具体的に言うと、hoge関数では、webページのhtmlタグ(ボタン)を取得して、if文にある条件を満たすとボタンを押すようにしています。ボタンが押されるとページが遷移するので、ページが遷移したらhoge関数を抜けるということをやりたいです。
async function main() { driver = new webdriver.Builder() .withCapabilities(webdriver.Capabilities.chrome()) .build(); try { await driver.get('https://xxx'); await hoge(true,1); await hoge(true,2); } catch (e) { console.error(e); } }; async function hoge(toggle, sid) { await driver.wait(until.elementIsVisible(driver.findElement(By.xpath('//div[@jsname="ilpChd" and @data-sid=\"' + sid + '\"]'), 1000))); const elem = await driver.findElement(By.xpath('//div[@jsname="ilpChd" and @data-sid=\"' + sid + '\"]')); var isChecked = toBoolean("false"); await elem.getAttribute('aria-checked').then(function(val) { isChecked = toBoolean(val); }) if ((isChecked == false && toggle == true) || (isChecked == true && toggle == false)) { await elem.click(); async.whilst( function() { driver.findElement(By.xpath('//div[@data-id="EBS5u"]/content/span')).then(function(data) { console.log("find element"); return true; }).catch(function(err) { console.log("end loop"); return false; }) }, function(callback) { }, function(err, n) { } ); } return 0; }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/26 15:00