如何验证网页元素的文本是否匹配Selenium Python?

How to validate whether the text of web elements matches in Selenium Python?

我一直在做一个项目,我需要在 Selenium Pythonassert 网络元素的文本。下面是我的意思的例子:

例子

我要assert的是图片最右边的值6.00和图片左下角的.00

Example.py

class Example:

    def checkValue(self):
       element 1 = self.driver.find_element_by_xpath("//div[contains(text(),'6.00')]")
       element 2 = self.driver.find_element_by_xpath("//label[contains(text(),'Total Amount: .00')]")

Test.py

class Test:

    def test_1:
        np = new Example()
        np.checkValue()

我已经包含了 2 个元素的蓝图。我可以知道如何在这个 example.py 程序中包含 assert 命令吗?

您应该检查是否可以找到具有给定价格的两个元素,或者您可以检查给定元素是否具有预期值。

选项 1

按价格查找元素并让 selenium 引发异常:

def check_value(self, expected_price):
    elem1_xp = '//tr[@whatever]//td[contains(text(),"%s")]' % expected_price # xpath of the subtotal price element, adjust it
    elem2_xp = '//div[contains(text(), "Total amount: $%s")]' % expected_price # xpath of the total element, adjust it
    element_1 = self.driver.find_element_by_xpath(elem1_xp)
    element_2 = self.driver.find_element_by_xpath(elem2_xp)

使用此解决方案,当找不到 element_1element_2 时,将引发异常,您将看到找不到哪个元素。你不需要在这里断言。如果两个元素都找到,则检查通过。

如果您正在搜索 6.00 并且它在屏幕上出现了两次,您需要小心避免找到相同的元素两次(或该元素及其父元素)。

选项2

检查两个元素的值是否匹配。这里的第一件也是最重要的事情是为两个元素提供精确的 xpath

def check_value(self, expected_price):
    elem1_xp = '//tr[@whatever]//td[4]' # precise xpath of the subtotal price element
    elem2_xp = '//div[contains(text(), "Total amount: $")]' # total price element
    element_1_value = self.driver.find_element_by_xpath(elem1_xp).text
    element_2_value = self.driver.find_element_by_xpath(elem2_xp).text.replace("Total amount: $", "")
    assert element_1_value == element_2_value == expected_price, "Price mismatch! Expected price is %s, subtotal is %s, total price is %s" % (expected_price, element_1_value, element_2_value)