English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Les méthodes de test WebDriver de Selenium que nous avons précédemment présentées sont basées sur les pages web. Les exemples précédents utilisaient des pages web simples pour opérer, ce qui pourrait ne pas permettre de ressentir le processus de chargement des pages web, mais dans le processus d'application réel, le chargement des pages web nécessite un certain temps. Votre script a déjà commencé à s'exécuter, mais l'élément que vous cherchez n'a pas encore été chargé, ce qui entraînera un message d'erreur indiquant que l'élément n'a pas été trouvé. Il est évident que les scripts qui ne tiennent pas compte du temps de chargement ne sont pas des scripts réussis. Aujourd'hui, nous allons vous expliquer comment configurer le temps d'attente.
Three methods of waiting
time.sleep(n)
Forced wait for n seconds. A function of Python itself, included in the time package, and needs to import the time package before use. We often use this kind of waiting in our previous examples to make it easier for everyone to see the results of script execution. This waiting method is very clumsy, and no matter how the page loads, it must wait for n seconds, which can be said to be very unsmart.
implicitly_wait(n)
Wait up to n seconds, and end the waiting early if the page is fully loaded within n seconds. This is a waiting method provided by WebDriver and is also known as implicit wait. It is a bit smarter than forced wait, but if the page itself contains a large video file or something similar, even if the element we need to locate has already been loaded at the beginning, the script still needs to wait for all files to be loaded before it can continue to execute, which still has some drawbacks.
WebDriverWait(n)
Wait up to n seconds, check for the existence of the required element at regular intervals within n seconds. If the element exists, the waiting will end early. This is a waiting method provided by WebDriver and is also known as explicit wait. This method is more intelligent than implicit wait, as it ignores the loading of the entire page and ends the waiting as soon as the required element exists.
Example
Forced wait has been used in previous examples, so let's take a look at the two waiting methods provided by WebDriver
Implicit wait
In fact, implicit wait has also been used in the previous introduction, but it was not mentioned specifically how to use it. This time we will open the homepage of NetEase, which is a portal website with a lot of content. According to the different internet speeds, it is estimated to take10seconds to load completely, we set the waiting time to60 seconds, then calculate how long it takes from opening the page to clicking the [Open Course] button on the page navigation bar.
# coding = utf-8 from selenium import webdriver import time driver = webdriver.Chrome() driver.implicitly_wait(60) #Implicit wait time60 seconds time_start = time.time() #Record the time when the page is opened driver.get('https://www.163.com/) driver.find_element_by_id('js_love_url').click() time_end = time.time() #Record the time after clicking the button print('access time is : ', time_end - time_start) #Print the time difference, which is the actual consumption time time.sleep(2) #强制等待2seconds, in order to observe we indeed opened the [Open Course] page driver.quit()
As we can see from the script execution end, although we have set the implicit time to60 seconds, but5Around 1 second (see the execution result below) the page has been fully loaded, and you can click the [Open Course] button. Below is one of my execution results, showing the entire loading time.
>> heure d'accès : 5.717327117919922
Attente explicite
Lors de l'utilisation de l'attente explicite, il est nécessaire d'importer la classe WebDriverWait de selenium.webdriver.support.wait, l'API est la suivante :
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
En raison du fait que l'attente implicite peut nécessiter de vérifier l'existence de l'élément, il est généralement nécessaire d'utiliser les deux méthodes suivantes en combinaison
until(method, message='') until_not(method, message='')
Attention, la méthode() doit être appelable, elle doit avoir la méthode __call__(). Reprenons l'exemple.
# coding = utf-8 from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait import time driver = webdriver.Chrome() class button(): def __call__(self, driver): if driver.find_element_by_id('js_love_url'): return True else: return False driver.implicitly_wait(60) time_start = time.time() driver.get('https://www.163.com/) # driver.find_element_by_id('js_love_url').click() WebDriverWait(driver,2,0.5).until(button()) time_end = time.time() print('access time is : ', time_end - time_start) time.sleep(2) driver.quit()
Après avoir regardé cet exemple, vous pourriez avoir des doutes, j'ai explicitement configuré l'attente jusqu'à2Seconde, pourquoi il n'y a pas d'erreur ? Parce que nous avons également configuré le temps d'attente latente, et la durée d'attente réelle est la plus longue des deux, donc dans cet exemple, le temps d'attente est encore60 seconde.
Résumé
1、Selenium peut utiliser trois types d'attente, la plus intelligente étant l'attente explicite WebDriverWait()
2、Lorsque l'attente latente et l'attente explicite coexistent, la durée d'attente la plus longue des deux est considérée comme la durée d'attente valide
3、Dans l'attente explicite, la méthode() de until(method()) est une méthode appelable, qu'elle peut être définie elle-même ou utilisée par des méthodes telles que des fonctions anonymes, etc. Nous en parlerons en détail à l'avenir
4、La configuration de l'attente latente est définie une fois, c'est-à-dire tout au long du script, l'attente强制性 doit être configurée à chaque endroit où il est nécessaire d'attendre
Voici la totalité du contenu de cet article, j'espère qu'il vous aidera dans vos études, et j'espère que vous soutiendrez également le tutoriel d'alarme.
Déclaration : Le contenu de cet article est extrait du réseau, propriété des auteurs respectifs, contribué et téléchargé par les utilisateurs d'Internet. Ce site ne détient pas de droits de propriété, n'a pas été édité par l'homme, ni n'assume la responsabilité des responsabilités juridiques associées. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)