如何解决 Selenium Python 中的 AssertionError?

How to resolve AssertionError in Selenium Python?

我目前正在 Python 中使用 Selenium 开发一个项目,当我在括号中放置一个特定的参数化值 6.00 时,我得到 AssertionError

Test.py

Class Test:

def test_voidnewcard(self):  
    np.createReqNewCard(expected_price= 6.00)

NewCard.py

Class NewCard:

def createReqNewCard(self, expected_price):
        self.driver.find_element_by_xpath(self.jobOrder_xpath).send_keys(self.jobReqNewCard)
        self.driver.find_element_by_xpath(self.excelButton_xpath).send_keys(self.excpath)
        self.driver.find_element_by_xpath(self.topup_textbox_xpath).send_keys("1")
        self.driver.find_element_by_xpath(self.calculateAmount_xpath).click()
        subTotalAmt =  self.driver.find_element_by_xpath("//body[1]/div[1]/div[3]/div[1]/div[1]/table[1]/tbody[1]/tr[1]/td[4]/div[1]").text
        totalCalAmt =  self.driver.find_element_by_xpath("//body[1]/div[1]/div[3]/div[1]/div[1]/div[4]/div[2]/label[1]").text.replace("Total amount: $", "")
        assert subTotalAmt == totalCalAmt == expected_price, "Price mismatch! Expected price is %s, subtotal is %s, total price is %s" % (round(expected_price,2), subTotalAmt, totalCalAmt)
        self.driver.find_element_by_xpath(self.buttonSubmit_xpath).click()
        time.sleep(8)

错误 StackTrace(如果我将 6.00 作为参数值

Failure
Traceback (most recent call last):
  File "C:\Python27\lib\unittest\case.py", line 329, in run
    testMethod()
  File "C:\Users\lukegoh\Desktop\Python Projects\SoftwareAutomationTesting\testCases\AutoTest.py", line 77, in test_voidnewcard
    np.createReqNewCard(expected_price= 6.00)
  File "C:\Users\lukegoh\Desktop\Python Projects\SoftwareAutomationTesting\newCard\NewCard.py", line 29, in createReqNewCard
    assert subTotalAmt == totalCalAmt == expected_price, "Price mismatch! Expected price is %s, subtotal is %s, total price is %s" % (round(expected_price,2), subTotalAmt, totalCalAmt)
AssertionError: Price mismatch! Expected price is 6.0, subtotal is 6.00, total price is Total Amount: .00

错误 StackTrace(如果我将 "6.00" 作为参数值)

Traceback (most recent call last):
  File "C:\Python27\lib\unittest\case.py", line 329, in run
    testMethod()
  File "C:\Users\lukegoh\Desktop\Python Projects\SoftwareAutomationTesting\testCases\AutoTest.py", line 77, in test_voidnewcard
    np.createReqNewCard(expected_price='6.00')
  File "C:\Users\lukegoh\Desktop\Python Projects\SoftwareAutomationTesting\newCard\NewCard.py", line 29, in createReqNewCard
    assert subTotalAmt == totalCalAmt == expected_price, "Price mismatch! Expected price is %s, subtotal is %s, total price is %s" % (expected_price, subTotalAmt, totalCalAmt)
AssertionError: Price mismatch! Expected price is 6.00, subtotal is 6.00, total price is Total Amount: .00

有人可以解决这个问题吗?我似乎无法诊断这个问题

text 属性 returns 字符串,即使文本看起来像数字。 "6.00" 不等于 6.00。尝试

subTotalAmt =  self.driver.find_element_by_xpath("//body[1]/div[1]/div[3]/div[1]/div[1]/table[1]/tbody[1]/tr[1]/td[4]/div[1]").text
totalCalAmt =  [float(i) for i in self.driver.find_element_by_xpath("//body[1]/div[1]/div[3]/div[1]/div[1]/div[4]/div[2]/label[1]").text.split() if i.isdigit()][0]
assert float(subTotalAmt) == totalCalAmt == expected_price

我刚刚意识到文本有一个特殊字符,所以我无法转换为 float

ValueError: could not convert string to float: Total Amount: .00

所以totalcalamt的值为

Total Amount: .00

所以我应该使用

float(subTotalAmt.split('$')[1])

这只得到string的数字部分。