使用Python WebDriver for Pytest将布尔结果存储在变量中

时间:2014-11-17 23:45:37

标签: python selenium-webdriver selenium-ide pytest

我将我的测试用例从Selenium IDE导出到Python&使用脚本将它们从Unittest转换为Py.test。在进行一些手动更改时,我偶然发现了一个需要解决方案的问题。

在IDE中,我有一个场景,我访问WebUI中的页面,存储该网页内容,&验证某个驱动程序是否存在:

storeBodyText  |  myBody  |     
storeEval      |  javascript{storedVars['myBody'].search("driver-video");}  |  isVideo

从这里,我访问“设置”页面并检查是否存在某些选项。如果在上面的代码中找到了视频驱动程序,则“设置”页面上应该存在该选项的链接。如果没有,那么链接将不会出现,我不需要验证它是否存在。我在IDE中处理如下:

if  |  storedVars['isVideo']!=-1
       waitForText  |  link=Display  |  Display
endIf

然后我使用'Python / unittest / WebDriver'导出我的代码并运行我创建的转换脚本,它将unittest代码转换为Py.test。这留下了以下相关代码:

myBody = driver.find_element_by_tag_name("BODY").text
# ERROR: Caught exception [ERROR: Unsupported command [getEval | javascript{storedVars['myBody'].search("driver-video");} | ]]
.
.
.
# ERROR: Caught exception [unknown command [if]]
WebDriverWait(driver, 60).until(
        expected_conditions.text_to_be_present_in_element((By.LINK_TEXT, "Display"), "Display")
    )
#         for i in range(60):
#             try:
#                 if "Display" == driver.find_element_by_link_text("Display").text: break
#             except: pass
#             time.sleep(1)
#         else: self.fail("time out")

# ERROR: Caught exception [unknown command [endIf]]

错误不是来自我的脚本。将测试用例导出到'Python / unittest / WebDriver'时出现错误。当然,完全可以预料到我使用java脚本来执行操作。现在,我正在尝试将其转换为Py.test并执行与我在Selenium IDE中所做的相同的操作。我正在寻找一种方法...

  1. 存储搜索'driver-video'驱动程序的结果,该驱动程序将具有某种布尔值。如果可能的话,我希望将这个结果直接存储到变量中,如果可能的话。可能看起来像或接近看起来像...的东西。
  2. isVidPres = WebDriverWait(driver,60).until(
                   assert re.search("^[\s\S]*driver-video[\s\S]*$",driver.find_element_by_css_selector("myBody").text
    )
    
    1. 使用该布尔变量来确定是否需要验证“显示”链接是否存在。
    2. 如果有必要,我愿意使用try / catch循环,但是如果可能的话,我希望在没有它的情况下执行此操作。有谁知道如何执行此操作?提前感谢任何可以帮助我的人。

1 个答案:

答案 0 :(得分:0)

我能够自己找到解决这个问题的方法。认为发布它可能是一个好主意,以防其他人遇到此问题,同时负责将Selenese代码导出到 Python / unittest / Web Driver ,然后将其转换为 Py.test < / strong>代码。

为了搜索页面以验证是否存在某些驱动程序,我使用了以下代码:

        systemPage = driver.find_element_by_css_selector("BODY").text

        if re.match("^[\s\S]*xorg-driver-video-intel[\s\S]*$", systemPage):
            isVideoPres = True
        else:
            isVideoPres = False

驱动程序存储在表中,但不保证表中驱动程序[如果已安装]的位置在同一位置。因此,我存储了页面的内容。执行正则表达式搜索驱动程序的名称。

对于我在安装驱动程序时验证关联链接的部分,我使用了以下代码:

        if isVideoPres == True:
            WebDriverWait(driver, 60).until(
                expected_conditions.text_to_be_present_in_element((By.LINK_TEXT, "Display"), "Display")
            )
        elif isVideoPres == False:
            WebDriverWait(driver, 60).until(
                expected_conditions.invisibility_of_element_located((By.LINK_TEXT, "Display"))
            )

在此代码中,我检查是否找到了视频驱动程序。如果是这样,我确认该链接将我带到&#34;显示&#34;设置可供用户单击。如果找不到驱动程序,那么我会在设置页面上验证链接是否存在。