使用Python的Selenium多线程



我编写了一个python测试脚本来测试网站的功能。登录到网页等功能。为了最大限度地进行测试,我尝试实现多线程来加快测试过程(这样我就可以同时运行两个测试用例(。我发现,当我运行脚本时,两个浏览器会打开(这是正确的(,然而,只有一个浏览器会执行我编写的操作(例如单击元素(。我可以正确浏览.get(链接(,但browser.find_element_by_xpath(xpath(.click((不起作用。

thread1 = threading.Thread(target=runTC, args=(argument1,))
thread2 = threading.Thread(target=runTC, args=(argument2,))
# Will execute both in parallel
thread1.start()
thread2.start()

runTC((由我编写的测试函数组成。

要利用多线程的优势,每个线程必须使用不同的WebDriver对象,因为WebDrider对象是一种绑定到web浏览器的特定会话/实例的绑定。

web驱动程序是一种服务,一方面向PL绑定公开REST接口(W3C标准(,另一方面将测试脚本中的调用转换为特定浏览器所理解的内容(这就是为什么不同浏览器有不同的web驱动程序(。

当您在测试脚本中创建WebDriver的实例时,它实际上建立了一个与正在运行的浏览器相关联的会话。因此,如果您的多个线程使用同一个对象,它们将在同一会话中运行,使用相同的cookie,从而相互影响。

如果您的线程使用它们自己的WebDriver实例,它们将在各自的浏览器中并行隔离运行。

最新更新