2016-08-22 140 views
1

所有,我需要一點點幫助硒等。我似乎無法弄清楚如何等待元素準備就緒。硒等待元素可點擊python

,我需要等待,我可以找到並單擊通過下面的代碼中使用我的腳本元素...

CreateJob = driver.find_element_by_xpath(".//*[@id='line']/div[1]/a") 

CreateJob = driver.find_element_by_partial_link_text("Create Activity") 

我需要等待這個元素在我嘗試點擊元素之前在頁面上可點擊。

我可以使用sleep命令,但我必須等待5秒或更長時間,它似乎是不可靠的,出錯8次左右出錯1次。

我似乎無法找到正確的語法使用。

爲此的HTML代碼如下。

<document> 
<html manifest="https://tddf/index.php?m=manifest&a=index"> 
<head> 
<body class="my-own-class mozilla mozilla48 mq1280 lt1440 lt1680 lt1920 themered" touch-device="not"> 
<noscript style="text-align: center; display: block;">Please enable JavaScript in your browser settings.</noscript> 
<div id="wait" style="display: none;"> 
<div id="processing" class="hidden" style="display: none;"/> 
<div id="loading" class="hidden" style="display: none;"/> 
<div id="loadingPartsCatalog" class="hidden"/> 
<div id="panel"> 
<div id="top-toolbar" class="hidden" style="display: block;"> 
<div id="commands-line" class="hidden" style="display: block;"> 
<div id="line"> 
<div class="action-link"> 
<a class="tap-active" href="#m=activity/a=set" action_link_label="create_activity" component_gui="action" component_type="action">Create Activity</a> 
</div> 
<div class="action-link"> 
<div class="action-link"> 
<div class="action-link"> 
</div> 
<div id="commands-more" style="display: none;"> 
<div id="commands-list" class="hidden"> 
</div> 
<div id="provider-search-bar" class="hidden center" 

回答

3

這裏是Python的硒文檔的「等待」部分的鏈接:http://selenium-python.readthedocs.io/waits.html#explicit-waits

你等待應該是這樣的:

element = WebDriverWait(driver, 10).until(
    EC.visibility_of((By.XPATH, ".//*[@id='line']/div[1]/a")) 
) 
+0

工作。任何想法如何基於元素的文本來使用它? – th2112

+2

'element = WebDriverWait(driver,10).until( EC.element_to_be_clickable((By.LINK_TEXT,「Create Activity」)) –

+0

@ th2112 Saurabh是正確的,還有一個By.PARTIAL_LINK_TEXT。 http://selenium-python.readthedocs.io/locating-elements.html – FamousJameous

0

如果你在Java嘗試以下WebDriverWait語法 -

new WebDriverWait(driver,10,100).until(ExpectedConditions.visibilityOf(CreateJob)); 

等待10ses和調查每100毫秒爲CreateJob元素是可見的。也可以使用ExpectedConditions.elementToBeClickable(CreateJob)

0

我覺得這是最簡單的:

driver.implicitly_wait(10) 

如果在預期條件未滿足的情況下腳本可能會崩潰,最多等待10秒。我認爲比總是檢查元素的可見性,可點擊性或任何元素的好處要好。但是,效率較低且容易出錯。所以它將更多地取決於你爲什麼使用硒。

它還可以讓我在我的硒腳本中減少try/except語句,並且由於我已經發現了這個,所以我減少了很多time.sleep()函數。