在我的测试中,我尝试使用 find_element_by_xpath 验证某些文本是否存在(在操作之后)。如果我使用正确的表达式和我的测试通过,例程会立即正确结束。 但是,如果我尝试错误的文本(意味着测试将失败),它将永远挂起,我必须杀死该脚本,否则它不会结束。
这是我的测试(表达式您输入的Thx用户,客户端或密码不正确在系统中不存在,无论用户做什么):
# -*- coding: utf-8 -*-
import gettext
import unittest
from selenium import webdriver
class TestWrongLogin(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.get("http://10.23.1.104:8888/")
# let's check the language
try:
self.lang = self.driver.execute_script("return navigator.language;")
self.lang = self.lang("-")[0]
except:
self.lang = "en"
language = gettext.translation('app', '/app/locale', [self.lang],
fallback=True)
language.install()
self._ = gettext.gettext
def tearDown(self):
self.driver.quit()
def test_wrong_client(self):
# test wrong client
inputElement = self.driver.find_element_by_name("login")
inputElement.send_keys("root")
inputElement = self.driver.find_element_by_name("client")
inputElement.send_keys("Unleash")
inputElement = self.driver.find_element_by_name("password")
inputElement.send_keys("qwerty")
self.driver.find_element_by_name("form.submitted").click()
# wait for the db answer
self.driver.implicitly_wait(10)
ret = self.driver.find_element_by_xpath(
"//*[contains(.,'{0}')]".\
format(self._(u"Thx user, client or password you entered is incorrect")))
self.assertTrue(isinstance(ret, webdriver.remote.webelement.WebElement))
if __name__ == '__main__':
unittest.main()
为什么会这样做,我该如何预防呢?
编辑:我能够找到问题:我在Ubuntu中运行我的Firefox,而我目前的Firefox版本(17.0)不受selenium的支持。通过集线器在IE8中运行相同的测试工作正常。
答案 0 :(得分:0)
问题出在你的xpath表达式中。不要将文本直接与所有可用文本进行比较。因此,当文本不匹配时,它会与DOM中的所有可用文本进行比较。
通过Xpath指定元素/标签,显示错误消息,然后检查该元素的text属性。
inputs = driver.find_elements(By.XPATH, "//input")
这段代码获取网页上的所有输入元素。
这有助于加快测试速度。我希望这有助于......一切顺利: - )