[英]Watir / Ruby: How to get the text of the selected item in a drop down list?
[英]Watir web driver taking too long to get the selected item from drop down
我正在使用watir web驅動程序進行網頁抓取,我填寫表格並獲得結果。 結果還包括下拉列表,從中我必須提取當前選定的文本。 我使用了以下查詢。
selectedList = browser.select_list(:id => "itemType")
從這里我可以使用以下查詢:
selectedText = selectedList.selected_options.map(&:text)[0]
使用此查詢,我可以獲取所選文本。 但問題是,下拉列表包含數千個選項,並且使用此查詢時,watir需要很長時間才能找到所選選項。
任何更快的方法表示贊賞。 我也試過以下查詢:
selected = selectedList.selected_options()[0]
selectedText = selected.text
但問題是一樣的。 我有其他下拉菜單和較小的選項,其中這兩個查詢都表現良好,但有數千個選項,它真的很慢。
問題是,要獲取所選選項,將為每個選項調用瀏覽器。 即使每次調用只需要幾分之一秒,它也會很快累積起來。
您可以使用execute_script
在單個有線調用中獲取所選選項:
selected_list = browser.select_list(id: 'itemType')
selected_options = browser.execute_script("return arguments[0].selectedOptions;", selected_list)
selected_text = selected_options.map(&:text)
對於只有1000個選項選擇列表的頁面,這會將執行時間從64秒減少到僅0.2秒。
以上工作適用於下拉和多選。 如果你知道它是一個下拉列表(即單個選擇的選項),你只需返回文本(而不是選定的選項集合)就可以更快:
selected_list = browser.select_list(id: 'itemType')
selected_text = browser.execute_script("return arguments[0].selectedOptions[0].text;", selected_list)
這將時間縮短到0.08秒。 但是,對於這么小的收益,我個人更喜歡第一種方法,因為它最小化了JavaScript代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.