2
我有一個網站,其中<select>
有超過100個<option>
s在其中,每個國家在世界上。我的測試需要選擇一個。我目前的解決方案 - 大約需要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
我在爪哇發現this SO answer,但似乎並沒有像Selenium.Support
或SelectByText
Haskell的東西。
由於提取了'WD.findElemsFrom'中的所有選項,可能會使用動態生成的XPath表達式(比如''//選項[contains(text(),'SomeOption')]''')更快地定位特定選項。看起來它會節省多次調用「WD.getText」。 – danidiaz