[英]Ruby/Selenium WebDriver 2: Find New Elements Fast
環境:
問題:
我有div標簽用作選擇。 單擊div,將顯示一個下拉樣式窗口,其中包含更多div標簽作為選擇選項。 現在,我可以創建一種為每個“ div as select”單擊這些選項中的每個選項的方法,但是我真正想要的是編寫一段代碼,單擊我了解的div,然后確定哪個div單擊后現在顯示並啟用。 然后,我可以隨機單擊選項之一。
所以我當前的代碼是這樣的:
allDivs = brwsr.find_elements(:tag_name, 'div')
origDivs = allDivs
allDivs.each do |e|
if ... # Get the div I want
e.click
newDivs = brwsr.find_elements(:tag_name, 'div')
origDivs.each do |orig|
newDivs.delete(orig)
end
# Do something with remaining new divs here
end
end
我的主要問題是,這非常慢。 我目前有大約200個div可以旋轉,此方法需要幾分鍾才能完成。 通常,我不希望通過數百個數組元素旋轉會花費很長時間。 但是確實如此。
為了縮短時間,我嘗試通過一次旋轉allDivs和newDivs並刪除所有未顯示和啟用的內容來進行過濾。
因此,我目前停留在一個非常慢的解決方案上。 我不介意這種“查找新div”的速度要慢一些,因為它也可以縮短腳本開發時間。 但是,要花幾分鍾才能完成。
第一個問題: Selenium是否只能返回在find_elements調用周圍顯示並啟用了一些額外的API字符串的元素?
第二個問題:有人不用遍歷元素數組就能找到更好的新div元素嗎?
如果您可以發布要自動執行的DOM的一些示例HTML,這將非常有幫助。
話雖如此,ruby webdriver綁定確實支持通過鏈接查找元素。 因此,給定一些這樣的html:
<div class="outer">
<div class="one">
<div class="alpha">A</div>
<div class="beta">B</div>
<div class="gamma">C</div>
</div>
<div class="two">
<div class="alpha">A</div>
<div class="beta">B</div>
<div class="gamma">C</div>
</div>
<div class="three">
<div class="alpha">A</div>
<div class="beta">B</div>
<div class="gamma">C</div>
</div>
</div>
您可以編寫如下代碼,以在第二個div組(“ two”)中找到“ B” div:
group = brwsr.find_element(:class => "two")
desired_item = group.find_element(:class => "beta")
或者,甚至更簡單地通過ruby的鏈接功能:
desired_item = brwsr.find_element(:class => "two").find_element(:class => "beta")
我最喜歡的另一種方法是通過CSS選擇器選擇元素,該選擇器以易於理解的語法更快地選擇元素:
desired_item = brwsr.find_element(:css => "div.two div.beta")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.