1

我正在使用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) 

我讓程序等待足夠長的時間,直到元素是可見的,但似乎硒沒有意識到,被隱藏的元素,現在是可見的。

+1

他們列出了一個演示[這裏](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

+0

謝謝Ouruborus。我用我的新嘗試更新了這個問題,現在我得到一個ElementNotVisibleException。 – AngelloMaggio

+0

我可以改變硒從硒,使其自己可見嗎? – AngelloMaggio

回答

0

那麼需要什麼樣的我的解決方案是一個不同的觀點(感謝ouroborus)和一些JavaScript效率

 wait = WebDriverWait(driver, 10) 

     print "Waiting for quiz to be visible" 
     element = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'wpProQuiz_list'))) 
     quiz = driver.find_element_by_xpath("//ol[@class='wpProQuiz_list']") 
     questions = driver.find_elements_by_class_name("wpProQuiz_listItem") 
     print questions 
     print "printed questions" 
     print len(questions) 
     for question in questions: 
      while True: 
       try: 
        print "trying to find answers" 
        answers = question.find_elements_by_tag_name("input") 
        print "Answers:" 
        print answers 
        el = answers[1] 
        driver.execute_script("arguments[0].style.visibility = 'visible';", el) 
        el.click() 
        break 

       except Exception as e: 
        print "Error: ", e 
        sleep(1) 


      while True: 
       try: 
        next_btn = driver.find_elements_by_name("next")[questions.index(question)] 
        driver.execute_script("arguments[0].style.visibility = 'visible';", next_btn) 
        next_btn.click() 
        sleep(5) 
        break 
       except Exception as e: 
        print e 
        sleep(5) 

缺乏不談,我只是想使它工作,我找到了解決辦法是使用JavaScript使我的元素可見,因此可以在沒有問題的情況下點擊它。現在我可以用隨機整數替換那些1,我有一個隨機完成測驗的程序。

相關問題