我正在使用Selenium Webdriver for Python開發一個頁面測試器,並遇到了一個特殊的問題。有一點我基本上是一個多選題測驗,我想一遍又一遍地嘗試隨機回答,直到我完成測驗。我沒有限制代碼可以嘗試執行測驗的次數或任何類型的驗證碼。在WordPress測驗中使用Selenium
問題出現在這個測驗動態變化的事實上。測驗插件可以在這裏找到(如果你想看到一些測驗的代碼)
https://wordpress.org/plugins/wp-pro-quiz/
這是我曾嘗試使用代碼:
wait =WebDriverWait(driver, wait)
element = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'wpProQuiz_questionInput')))
answers = driver.find_elements_by_xpath("//input[@class='wpProQuiz_questionInput'][1]")
mouse.move_to_element(answers[1]).click().perform()
和它的工作原理好吧,但僅限於第一個問題。然後,我繼續點擊「下一步」按鈕
next_btn = driver.find_element_by_name("next")
next_btn.click()
也可以工作,但是當循環再次啓動,並試圖再次找到wpProQuiz_questionInput,它給了我一個超時異常,因爲它沒有找到項目。
我不確定是否必須告訴硒測驗已更新,或以某種方式聽取它。重新啓動頁面也會導致測驗重新啓動。
謝謝,讓我知道如果有更多的信息我可以幫助你幫助我!
UPDATE:
顯示我的所有問題都以列表形式的評論之後。
非常有用的信息,謝謝。但是我仍然遇到一些麻煩。
wait = WebDriverWait(driver, 10)
print "Waiting for quiz to be visible"
element = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'wpProQuiz_list')))
questions = driver.find_elements_by_xpath("//ol[@class='wpProQuiz_list'][1]")
print questions
print "printed questions"
for question in questions:
try:
print "trying to find answers"
answers = question.find_elements_by_tag_name("input")
print "Answers:"
print answers
answers[1].click()
except Exception as e:
print "Error: ", e
try:
next_btn = driver.find_element_by_name("next")
next_btn.click()
sleep(10)
except:
end_btn = driver.find_element_by_name("endQuizSummary")
end_btn.click()
sleep(10)
我讓程序等待足夠長的時間,直到元素是可見的,但似乎硒沒有意識到,被隱藏的元素,現在是可見的。
他們列出了一個演示[這裏](http://www.it-gecko.de/wp-pro-quiz-quiz-plugin-fuer-wordpress.html)。看起來測驗是一系列'li.wpProQuiz_listItem'元素。他們提前呈現,然後使用顯示/隱藏來顯示個別問題。 'wpProQuiz_questionInput'是一個特定類型的答案的類(在這種情況下,填入文本框的答案)。 'element_to_be_clickable()'可以獲得可點擊的項目;隱藏的項目不被視爲可點擊。另外,下一個問題可能不是正確的類(例如:'.wpProQuiz_questionList'是針對多選題的答案集)。 – Ouroborus
謝謝Ouruborus。我用我的新嘗試更新了這個問題,現在我得到一個ElementNotVisibleException。 – AngelloMaggio
我可以改變硒從硒,使其自己可見嗎? – AngelloMaggio