2
私は<select>
のサイトを持っています。そのサイトには、世界のすべての国に1つずつ、<option>
が100以上あります。私のテストは1つを選択する必要があります。現在の私の解決策は、約2.5秒かかります。私はそれがはるかに速くなるようにしたいと思います。 Haskellとwebdriverを使用してドロップダウンからオプションをすばやく選択するにはどうすればよいですか?
findChildrenByLabel :: (WD.WebDriver m, MonadIO m) =>
Text -> Text -> m [WD.Element]
findChildrenByLabel label tagName = do
parentEl <- findFieldByLabel label
WD.findElemsFrom parentEl $ WD.ByTag tagName
findChildByLabelF :: (WD.WebDriver m, MonadIO m) =>
Text -> Text -> (WD.Element -> m Bool) -> m WD.Element
findChildByLabelF label tagName f = do
children <- findChildrenByLabel label tagName
child <- filterM f children
liftIO $ child `shouldSatisfy` ((==1) . length)
return (headEx child)
selectDropdownByLabel :: (WD.WebDriver m, MonadIO m) => Text -> Text -> m()
selectDropdownByLabel label optionName = do
targetOption <- findChildByLabelF
label "option" (\el -> (== optionName) <$> WD.getText el)
WD.click targetOption
私はJavaでthis SO answerを見つけましたが、HaskellのためのSelenium.Support
またはSelectByText
のようなものがあるようには思えません。 danidiazの答えに基づいて
'' WD.findElemsFrom'のすべてのオプションを抽出するようになっています。おそらく '' // option [contains(text()、 'SomeOption')] '' 'のように動的に生成されたXPath式を使って特定のオプションを対象にしています。 'WD.getText'への複数の呼び出しを保存するようです。 – danidiaz