2016-01-18 61 views
1

我想檢測文本的存在(無論是知名度的基礎文本),其閃爍通過這個jQuery引起:蟒蛇硒如何最好地檢測閃爍的文字?

/* Blink thingy*/ 
$('.blink').each(function() { 
    var elem = $(this); 
    setInterval(function() { 
     if (elem.css('visibility') == 'hidden') { 
      elem.css('visibility', 'visible'); 
     } else { 
      elem.css('visibility', 'hidden'); 
     }  
    }, 500); 
}); 

到目前爲止,我被擊中的思念結果與:

UpdateTaskCompleteElement = driver.find_element_by_xpath("/html/body/div[3]/h3/span") 

UpdateTaskCompleteMessage = UpdateTaskCompleteElement.text 
if UpdateTaskCompleteMessage == ExpectedUTCMessage: 
    #Make a log entry 
else: 
    #Throw an error 

眨眼之間捕獲消息的最佳方法是什麼? 是否有可以解決這個問題的Python或硒中的函數?

我一直試圖把python放到一個循環中,讓它運行十次,但我認爲這隻會減少機會,我仍然需要偶爾重新運行腳本{這是一個長腳本:(?}

+0

您是否需要檢查實際上是閃爍還是隻是獲取底層文本而不管其可見性如何? – alecxe

+0

只要底層文本與可見性無關。 –

回答

1

在這種情況下,更好的方法是wait for a specific element to have a specific text

from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

wait = WebDriverWait(driver, 10) 
wait.until(EC.text_to_be_present_in_element((By.XPATH, "/html/body/div[3]/h3/span"), ExpectedUTCMessage)) 

這將等待長達10秒檢查ExpectedUTCMessage文本的元素中存在每半秒。

0

由於答案爲止。關閉,沒有其他人發佈更好的東西,這裏是我的Loop測試。我不太喜歡這個,但它確實有效。

ExpectedUTCMessage = "Whatever the message should be." 
UpdateTaskCompleteElement = driver.find_element_by_xpath("/html/body/div[3]/h3/span") 


BlinkDetectLoopPass = False 
for BlinkChecknum in range(0,20): # I'm using 20 loops because I have seen as many as 9 failed attempts 

    UpdateTaskCompleteMessage = UpdateTaskCompleteElement.text 

    if UpdateTaskCompleteMessage == ExpectedUTCMessage: 
     BlinkDetectLoopPass = True 
     break 
    else: 
     #Just displaying the failed detections, don't really need this else 
     print("\nUpdate Task Complete Message missed blink check #" + str(BlinkChecknum + 1) + ".\n") 

if BlinkDetectLoopPass: 
    #Success Handling 
else: 
    #Error Handling 

請發佈任何更好的,謝謝!