首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python卡在DropDown上,没有选择

Python卡在DropDown上,没有选择
EN

Stack Overflow用户
提问于 2020-11-23 18:12:29
回答 1查看 121关注 0票数 1

我是一条蟒蛇,硒,网络驱动,纽比。我被困在一个下拉列表中,它在html中有一个"onchange“参数。检查窗口是这样的:

  • I尝试在“开始”
  • 框中先输入日期,然后转到“学校”(School1,School2等)的下拉列表。一旦我选择了学校,相邻的辍学(学校级别)将刷新/更新/填充该学校的学校级别(中、高、小等)。这个元素有一个"onchange=“。然后,
  • 转到下拉的学校级别,选择这个级别。对于这个元素有一个"onchange=“,也就是
  • ,然后移动到年级下拉列表中。

我被困在第一个dropdown.After,我输入了开始日期,它确实移动到下拉并点击它,所有的三所学校变得可见,但司机没有选择学校,也没有移动到相邻的学校级别的辍学。

据我在网上发现的情况来看,这很可能与事件有关,但我想不出如何触发该事件。

请帮帮忙。提前谢谢你。

这是“开始日期”框的html块:

代码语言:javascript
运行
复制
<div class="inline-block" ><input name="Template1$Control0$BottomPanel$StudentEditEnrollmentAdd$DatePickerStartDate" type="text" size="9" id="Template1_Control0_BottomPanel_StudentEditEnrollmentAdd_DatePickerStartDate" spellcheck="false" style="BACKGROUND:#ff9999;display:inline;" /><input type="image" name="Template1$Control0$BottomPanel$StudentEditEnrollmentAdd$DatePickerStartDate_IB" id="Template1_Control0_BottomPanel_StudentEditEnrollmentAdd_DatePickerStartDate_IB" src="Images/Mindex/WebControls/DatePicker/calendar.jpg" onclick="PopupCal(&#39;Template1_Control0_BottomPanel_StudentEditEnrollmentAdd_DatePickerStartDate&#39;, &#39;Template1_Control0_BottomPanel_StudentEditEnrollmentAdd_DatePickerStartDate&#39;,false,false); return false;" style="border-width:0px;display:inline;vertical-align:middle;" /></div></nobr>

这是两个相邻下拉列表的html块:

代码语言:javascript
运行
复制
<select name="Template1$Control0$BottomPanel$StudentEditEnrollmentAdd$BuildingDropDown" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;Template1$Control0$BottomPanel$StudentEditEnrollmentAdd$BuildingDropDown\&#39;,\&#39;\&#39;)&#39;, 0)" id="Template1_Control0_BottomPanel_StudentEditEnrollmentAdd_BuildingDropDown">
                                            <option selected="selected" value="3">School1</option>
                                            <option value="4">School2</option>
                                            <option value="5">School3</option>

                                        </select>
<select name="Template1$Control0$BottomPanel$StudentEditEnrollmentAdd$BuildingSchoolLevelDropDown" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;Template1$Control0$BottomPanel$StudentEditEnrollmentAdd$BuildingSchoolLevelDropDown\&#39;,\&#39;\&#39;)&#39;, 0)" id="Template1_Control0_BottomPanel_StudentEditEnrollmentAdd_BuildingSchoolLevelDropDown">
                                                <option selected="selected" value="4">K-8</option>
                                                <option value="5">High School</option>
                                                <option value="6">Summer School</option>
                                                <option value="7">Middle School</option>
                                                <option value="8">Elementary</option>
    
                                            </select></nobr>

这是我的密码:

代码语言:javascript
运行
复制
print("Clicking on student selector icon")
driver.find_element_by_xpath("/html/body/form/div[4]/div[1]/div/div[2]/div/table/tbody/tr/td/table[2]/tbody/tr["+str(r)+"]/td[1]/input").click()
time.sleep(2)
tab_student = driver.find_element_by_id("Template1_Control0_TabHeaderDetails_MenuTabs1_MenuTabStudent")#we can move this to the start of the script
tab_student.click()
time.sleep(3)


icon_add_enrollment = driver.find_element_by_id("Template1_Control0_BottomPanel_IconButtonAdd")#we can move this to the start of the script
icon_add_enrollment.click()
time.sleep(3)

input_startdate = driver.find_element_by_id("Template1_Control0_BottomPanel_StudentEditEnrollmentAdd_DatePickerStartDate")
input_startdate.send_keys("4/21/2010")
time.sleep(2)
print("Start Date entered")


dropdown_school = driver.find_element_by_id("Template1_Control0_BottomPanel_StudentEditEnrollmentAdd_BuildingDropDown")
dropdown_school.select_by_visible_text("School1")

time.sleep(5)
print("School picked")
time.sleep(6)

dropdown_level = driver.find_element_by_id("Template1_Control0_BottomPanel_StudentEditEnrollmentAdd_BuildingSchoolLevelDropDown")
dropdown_level.select_by_visible_text("Elementary")

#or maybe I can use this?  actions.move_to_element(dropdown_building).click().perform()

time.sleep(2)

print("Building picked")
time.sleep(6)

dropdown_grade = driver.find_element_by_id("Template1_Control0_BottomPanel_StudentEditEnrollmentAdd_GradeDropDown")
actions.move_to_element(dropdown_grade).click().perform()
time.sleep(2)
dropdown_grade.select_by_visible_text("1").click()
print("Grade picked")
time.sleep(2)

dropdown_ethnicity = driver.find_element_by_id("Template1_Control0_BottomPanel_StudentEditEnrollmentAdd_ddlEthnicity")
actions.move_to_element(dropdown_ethnicity).click().perform()
time.sleep(2)
dropdown_ethnicity.select_by_visible_text("White").click()
print("Ethnicity picked")
time.sleep(2)

icon_save_enrollment = driver.find_element_by_id("Template1_Control0_BottomPanel_StudentEditEnrollmentAdd_IconButtonAdd")#we can move this to the start of the script
icon_save_enrollment.click()

time.sleep(4)

print("Enrollment added.. Moving on to enrolling the next child")

我还尝试了move_to_element().click(perform() ),但仍然无法工作。

由于某些原因,html中的onchange脚本没有正确显示,因此我在下面附加它们:

代码语言:javascript
运行
复制
//for school dropdown:

javascript:setTimeout('__doPostBack(\'Template1$Control0$BottomPanel$StudentEditEnrollmentAdd$BuildingDropDown\',\'\')', 0)


//for school levels dropdown:

javascript:setTimeout('__doPostBack(\'Template1$Control0$BottomPanel$StudentEditEnrollmentAdd$BuildingSchoolLevelDropDown\',\'\')', 0)

再次感谢您。

EN

回答 1

Stack Overflow用户

发布于 2020-11-23 18:38:21

据我所知,这正是你的问题所在:

在我输入开始日期后,它确实在下拉菜单上移动并点击它,所有三所学校都可以看到,但是驱动程序没有选择学校,也没有移动到相邻的学校级别的下拉列表。

这意味着,一旦onchange正确地检测到日期,则在选择下拉列表或<select>输入时会发生错误。

我发现在类似的情况下这样做是可行的:

代码语言:javascript
运行
复制
schoolSelector = Select(driver.find_element_by_xpath('//select[@name="Template1$Control0$BottomPanel$StudentEditEnrollmentAdd$BuildingSchoolLevelDropDown"]'))
schoolOptions = schoolSelector.options

然后,如果您想遍历每一所学校,您可以使用schoolOptions来获得每一所学校的以下内容:

代码语言:javascript
运行
复制
for school in range(0,len(schoolOptions)):
    schoolSelector.select_by_index(school)

编辑:没有注意到您发布了所有的代码,我认为按索引和XPATH进行选择通常更精确。试试看。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64973952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档