我试图从页面对象类中分离我的定位器。它与driver.find_element完美结合。但是,如果我尝试将其与EC一起使用,例如self.wait.until(EC.visibility_of_element_located(*OrderLocators.file_upload_in_process))

我得到这个错误

File "C:\FilePath\ClabtFirstForm.py", line 95, in wait_for_file_upload
    wait.until(EC.visibility_of_element_located(*OrderLocators.file_upload_in_process))
TypeError: __init__() takes 2 positional arguments but 3 were given


我的测试方法

def test_files_regular(self):
    project_path = get_project_path()
    file = project_path + "\Data\Media\doc_15mb.doc"
    self.order.button_upload_files()
    self.order.button_select_files(file)
    self.order.wait_for_file_upload()


页面对象类

class CreateOrder(object):

def __init__(self, driver):
    self.driver = driver
    self.wait = WebDriverWait(driver, 25)

def button_upload_files(self):
    self.driver.find_element(*OrderLocators.button_upload_files).click()

def button_select_files(self, file):
    self.driver.find_element(*OrderLocators.button_select_files).send_keys(file)

def wait_for_file_upload(self):
    self.wait.until(EC.visibility_of_element_located(*OrderLocators.file_upload_in_process))
    self.wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "[ng-show='item.isSuccess']")))


定位器

class OrderLocators(object):

    button_upload_files = (By.CLASS_NAME, 'file-upload-label')
    button_select_files = (By.CLASS_NAME, 'input-file')
    file_upload_in_process = (By.CSS_SELECTOR, "[ng-show='item.isUploading']")

最佳答案

当您将参数与visibility_of_element_located()传递给*时,实际上是在传递扩展的可迭代OrderLocators.file_upload_in_process。也就是说,此调用:

visibility_of_element_located(*OrderLocators.file_upload_in_process)


, 是相同的:

visibility_of_element_located(By.CLASS_NAME, 'input-file')


请注意在第二行中该方法实际上是如何使用两个参数调用的。

同时,此条件的constructor expects only a single argument-两个元素的元组/列表;因此例外。

该修复程序-将其期望的值(元组本身)传递给它,而不会花费它:

visibility_of_element_located(OrderLocators.file_upload_in_process)

关于python - EC不使用其他文件中的定位器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54199833/

10-09 07:16