我在Firefox中使用Selenium Webdriver来运行我的代码。我正在使用pytest,因此可以并行运行这些功能。我有三个主要功能:第一个和第二个功能返回某些内容,第三个功能使用以前的功能中的数据。 我的问题是,前两个功能完成后,我想用从两个功能返回的数据执行第三个功能。
代码本身实际上要复杂得多,但为澄清起见,我编写了一个新代码来演示我的问题。我有两个函数,一个名为“ test1”,另一个名为“ test2”,这两个函数并行运行并返回信息。我还有一个名为“ test3”的第三个函数,用于处理完test1和test2返回的数据。在此示例中,“ comp”应仅打印出一些文本。
代码如下:
import unittest
from time import sleep
from selenium import webdriver
# pytest -s -v tests.py <----- I use to execute this script
# py.test -s tests.py -d --tx 2*popen//python=python2.7 <------- I use this to run the tests in parallel
# For some reason program doesnt print in parallel mode. Although "-s" fixes that in the normal execution of pytest.
class TestParallel(unittest.TestCase):
def setUp(self):
self.browser = webdriver.Firefox(executable_path='./dependencies/geckodriver')
def test1(self):
browser = self.browser
browser.get('https://www.google.com/')
asd = browser.find_element_by_xpath("/html/body/div/div[3]/div[1]/div/div/div/div[1]/div[1]/a").text # returns "Gmail"
sleep(2)
print asd
return asd
def test2(self):
browser = self.browser
browser.get('https://www.google.com/')
asd2 = browser.find_element_by_xpath("/html/body/div[1]/div[3]/div[1]/div/div/div/div[1]/div[2]/a").text # returns "Images"
sleep(1)
print asd2
return asd2
def test3(self):
print "word from test1 is " + TestParallel.test1(self) + " and word from test2 is " + TestParallel.test2(self)
def tearDown(self):
self.browser.quit()
if __name__ == "__main__":
unittest.main()
也许有人对我如何解决此问题有想法/建议。谢谢!
答案 0 :(得分:0)
修改
好,这是另一个主意:
已测试3 等待while循环,直到两个变量都包含某些内容 或直到经过特定时间。
class TestParallel(unittest.TestCase):
string_a = ""
string_b = ""
def setUp(self):
self.browser = webdriver.Firefox(executable_path='./dependencies/geckodriver')
def test1(self):
[..]
string_a = "result_a"
def test2(self):
[..]
string_b = "result_b"
def test3(self):
counter = 0;
while ("" in string_a && "" in string_b):
sleep(0.1)
counter = counter + 1
if counter > 200:
break
print "word from test1 is " + string_a + " and word from test2 is " + string_b
嗯,也许是:
def test3(self):
counter = 0;
while ("" in string_a && "" in string_b):
sleep(0.1)
counter = counter + 1
if counter > 1000:
break
print "word from test1 is " + string_b + " and word from test2 is " + string_b
答案 1 :(得分:-1)
test1
和test2
看起来并不像测试……它们看起来应该是从测试中使用的页面返回数据的函数。我会做更多类似的事情
def get_thing1(self):
return self.browser.find_element_by_xpath("/html/body/div/div[3]/div[1]/div/div/div/div[1]/div[1]/a").text # returns "Gmail"
def get_thing2(self):
return self.browser.find_element_by_xpath("/html/body/div[1]/div[3]/div[1]/div/div/div/div[1]/div[2]/a").text # returns "Images"
def test1(self):
browser = self.browser
browser.get('https://www.google.com/')
print "word from test1 is " + get_thing1(self) + " and word from test2 is " + get_thing2(self)
这两个方法get_thing1
和get_thing2
假定您在正确的页面上,而它们所做的只是返回您要查找的内容。请将名称更改为更具描述性的名称...我不确定它们到底返回了什么,所以我组成了一些通用名称。
现在,您只有test1
可以运行,还有两个方法可以从页面中提取内容。您可以根据需要……并行运行test1
多次,等等。……循环运行或任意运行。
附加说明:
get_thing1()
和get_thing2()
放在该页面对象中。然后,您将进行测试,将其从GoogleSearchPage升级到GoogleSearchResultsPage,然后调用这两个方法等,以从该页面获取数据。