2015-10-27 53 views
0

我想选择一个下拉元素,但我得到的错误硒的webdriver的Python选择分配

Error 
Traceback (most recent call last): 
    File "C:\Webdriver\ClearCore\TestCases\OperationsPage_TestCase.py", line 59, in test_add_and_run_clean_process 
    process_lists_page.click_select_a_preview_to_import_configuration_from_dropdown_from_clean_task_tab(Globals.datapreview_crm_name) 
    File "C:\Webdriver\ClearCore\Pages\operations.py", line 113, in click_select_a_preview_to_import_configuration_from_dropdown_from_clean_task_tab 
    select = (Select(self.get_element(By.XPATH, 'html/body/div[2]/div[2]/div/div[4]/div/div[2]/div/div[3]/div/div[7]/div/div[3]/div/div[4]/div/div[2]/div/div[4]/div/div[3]/div/div[3]/div/div[4]/div/div[2]/div/div[3]/div/div[2]/div/div[3]/div/div[3]/div/div/div/div/div[1]/div[1]/div[2]/span[10]/span/select'))) 
    File "C:\Webdriver\ClearCore 501\Pages\base.py", line 31, in get_element 
    return element 
UnboundLocalError: local variable 'element' referenced before assignment 

我的方法实施之前引用的下拉错误局部变量因素是:

def click_select_a_preview_to_import_configuration_from_dropdown_from_clean_task_tab(self, data_preview_name): 
    #select = Select(By.XPATH, '//span[contains(text(), "Select a data preview to import configuration from")]/preceding::span[1]//../span//../select') 
    #select = (Select(WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//span[contains(text(), "Select a data preview to import configuration from")]/preceding::span[1]//../span//../select'))))) 
    #select = (Select(WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((By.XPATH, 'html/body/div[2]/div[2]/div/div[4]/div/div[2]/div/div[3]/div/div[7]/div/div[3]/div/div[4]/div/div[2]/div/div[4]/div/div[3]/div/div[3]/div/div[4]/div/div[2]/div/div[3]/div/div[2]/div/div[3]/div/div[3]/div/div/div/div/div[1]/div[1]/div[2]/div/span[10]/span/select'))))) 
    select = (Select(self.get_element(By.XPATH, 'html/body/div[2]/div[2]/div/div[4]/div/div[2]/div/div[3]/div/div[7]/div/div[3]/div/div[4]/div/div[2]/div/div[4]/div/div[3]/div/div[3]/div/div[4]/div/div[2]/div/div[3]/div/div[2]/div/div[3]/div/div[3]/div/div/div/div/div[1]/div[1]/div[2]/span[10]/span/select'))) 
    print select.options 
    print [o.text for o in select.options] # these are string-s 
    select.select_by_visible_text(str(data_preview_name)) 
    return self 

get_element的实现是:

# returns the element if found 
    def get_element(self, how, what): 
     # params how: By locator type 
     # params what: locator value 
     try: 
      element = self.driver.find_element(by=how, value=what) 
     except NoSuchElementException, e: 
      print what 
      print "Element not found " 
      print e 
     return element 

从t调用下拉的方法他TestCase类是:

process_lists_page.click_select_a_preview_to_import_configuration_from_dropdown_from_clean_task_tab("Selenium_LADEMO_CRM_DONOTCHANGE") 

的HTML是:

<div id="operations_add_process_list_tab_groups_tab_standard_1"> 
    <span/> 
    <span> 
     <span class="" title="" style="font-weight:bold;">Select a data preview to import configuration from</span> 
    </span> 
    <span> 
    <span/> 
    <span/> 
    <span/> 
    <span/> 
    <span/> 
    <span> 
    <span class="" title="None" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;"> 
     <select tabindex="-1"> 
      <option selected="selected" value="None">None</option> 
      <option value="CRMINVALID_07102015">CRMINVALID_07102015</option> 
      <option value="LADEMO_crm2_Chrome">LADEMO_crm2_Chrome</option> 
      <option value="LADEMO_CRM_DONOTCHANGE_CHROME">LADEMO_CRM_DONOTCHANGE_CHROME</option> 
      <option value="LADEMO_ESCR_DO_NO_CHANGE_CHROME">LADEMO_ESCR_DO_NO_CHANGE_CHROME</option> 
      <option value="Lademo_odb_Data">Lademo_odb_Data</option> 
      <option value="MegaOne_07102015">MegaOne_07102015</option> 
      <option value="riazNoQuotesUTF8">riazNoQuotesUTF8</option> 
      <option value="Selenium_LADEMO_CRM_DONOTCHANGE">Selenium_LADEMO_CRM_DONOTCHANGE</option> 
      <option value="Selenium_LADEMO_ESCR_DONOTCHANGE">Selenium_LADEMO_ESCR_DONOTCHANGE</option> 
      <option value="Selenium_LADEMO_ORCHARD_DONOTCHANGE">Selenium_LADEMO_ORCHARD_DONOTCHANGE</option> 
      <option value="test">test</option> 
      <option value="_CRM_DONOTCHANGE">_CRM_DONOTCHANGE</option> 
     </select> 
    </span> 
    </span> 
</div> 

为什么会出现错误?它是一种竞争条件,元素尚不可见? 我试过使用WebDriverWait,我得到了同样的错误。

从下拉我想选择值“Selenium_LADEMO_CRM_DONOTCHANGE”

感谢, 里亚兹

回答

0

您使用的是“私人”的方法找到的元素。

据其description

find_element(由= 'ID',值=无)

由find_element_by_ *方法中使用的“私人”方法。

用法:使用相应的find_element_by_ *代替这个。

尝试改变:

element = self.driver.find_element(by=how, value=what) 

为:

element = self.driver.find_element_by_xpath(value=what) 
+0

该方法get_element在我的基类。我从它继承。当我调用get_element时,我的其他测试用例可以与此一起使用。我的类头是类OperationPage(BasePage): –

0

我设法得到它现在的工作。我用下面的XPath

//div[@id="operations_add_process_list_tab_groups_tab_standard_1"]//select 

的WebDriverWait代码:

select = Select(WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//div[@id="operations_add_process_list_tab_groups_tab_standard_1"]//select')))) 

只有1下拉DIV ID下面。 // select将从div id标签内的任何位置查找下拉菜单。如果结构改变,这仍然有效。