我想选择一个下拉元素,但我得到的错误硒的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”
感谢, 里亚兹
该方法get_element在我的基类。我从它继承。当我调用get_element时,我的其他测试用例可以与此一起使用。我的类头是类OperationPage(BasePage): –