簡體   English   中英

Ruby / Selenium WebDriver 2:快速查找新元素

[英]Ruby/Selenium WebDriver 2: Find New Elements Fast

環境:

  • Ruby 1.8.7
  • Selenium WebDriver 2
  • Ubuntu 12.04桌面
  • Firefox 13.0.1

問題:

我有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM