Python Selenium - Select 下拉菜单中的值
Python Selenium - Select value from drop down menu
我想 select 下拉菜单中的一个值,其中有多个菜单
我使用以下代码:
# CLICK ARROW
driver.find_element(By.CSS_SELECTOR, '#WIN_7_1000000217 > a:nth-child(3)').click()
# 1ST MENU
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'div.MenuOuter:nth-child(7) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(6)')))
menu_1 = driver.find_element(By.CSS_SELECTOR, 'div.MenuOuter:nth-child(7) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(6)')
actions.move_to_element(menu_1).click().perform()
# 2ND MENU
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'div.MenuOuter:nth-child(11) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1)')))
menu_2 = driver.find_element(By.CSS_SELECTOR, 'div.MenuOuter:nth-child(9) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1)')
actions.move_to_element(menu_2).click().perform()
# 3RD MENU
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'tr.MenuTableRow:nth-child(35)')))
menu_3 = driver.find_element(By.CSS_SELECTOR, 'tr.MenuTableRow:nth-child(35)')
actions.move_to_element(menu_3).click().perform()
但是我不能select第二个菜单,它的CSS_SELECTOR是:
div.MenuOuter:nth-child(9) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1)
有时它是这样工作的,但问题是 CSS_SELECTOR 每次第一个 nth-child 的数字都会改变,有时是 9、11 或 12。 ..有没有办法解决这个问题并找到我想要的元素?
Html 图像中可见的第二个菜单的代码:
<div class="MenuScrollUp" style="background-image: url("../../../../resources/images/menu_up.gif"); width: 62px; visibility: hidden;"></div>
<div class="MenuTableContainer">
<table class="MenuTable" style="width: 62px;" cellspacing="0" cellpadding="0">
<tbody class="MenuTableBody">
<tr class="MenuTableRow">
<td class="MenuEntryNameHover" nowrap="">IT Support</td>
<td class="MenuEntrySubHover" style="background-image:url("../../../../resources/images/menu_sub.gif")" arsubmenu="0"> </td>
</tr>
</tbody>
</table>
</div>
<div class="MenuScrollDown" style="background-image: url("../../../../resources/images/menu_down.gif"); width: 62px; visibility: hidden;"></div>
Html ESI 代码 - Espirito Santo Informatica 和 IBM 外包:
<div class="MenuTableContainer">
<table class="MenuTable" style="width: 174px;" cellspacing="0" cellpadding="0">
<tbody class="MenuTableBody">
<tr class="MenuTableRow">
<td class="MenuEntryName" nowrap="">ESI - Espirito Santo Informatica</td>
<td class="MenuEntrySub" style="background-image:url("../../../../resources/images/menu_sub.gif")" arsubmenu="4"> </td>
</tr>
<tr class="MenuTableRow">
<td class="MenuEntryName" nowrap="">IBM Outsourcing</td>
<td class="MenuEntrySub" style="background-image:url("../../../../resources/images/menu_sub.gif")" arsubmenu="5"> </td>
</tr>
</tbody>
</table>
</div>
为什么不 xpath ?
//td[contains(text() , 'IT Support')]
像这样:
# 2ND MENU
actions.move_to_element(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[contains(text() , 'IT Support')]")))).click().perform()
我想 select 下拉菜单中的一个值,其中有多个菜单
我使用以下代码:
# CLICK ARROW
driver.find_element(By.CSS_SELECTOR, '#WIN_7_1000000217 > a:nth-child(3)').click()
# 1ST MENU
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'div.MenuOuter:nth-child(7) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(6)')))
menu_1 = driver.find_element(By.CSS_SELECTOR, 'div.MenuOuter:nth-child(7) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(6)')
actions.move_to_element(menu_1).click().perform()
# 2ND MENU
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'div.MenuOuter:nth-child(11) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1)')))
menu_2 = driver.find_element(By.CSS_SELECTOR, 'div.MenuOuter:nth-child(9) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1)')
actions.move_to_element(menu_2).click().perform()
# 3RD MENU
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'tr.MenuTableRow:nth-child(35)')))
menu_3 = driver.find_element(By.CSS_SELECTOR, 'tr.MenuTableRow:nth-child(35)')
actions.move_to_element(menu_3).click().perform()
但是我不能select第二个菜单,它的CSS_SELECTOR是:
div.MenuOuter:nth-child(9) > div:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1)
有时它是这样工作的,但问题是 CSS_SELECTOR 每次第一个 nth-child 的数字都会改变,有时是 9、11 或 12。 ..有没有办法解决这个问题并找到我想要的元素?
Html 图像中可见的第二个菜单的代码:
<div class="MenuScrollUp" style="background-image: url("../../../../resources/images/menu_up.gif"); width: 62px; visibility: hidden;"></div>
<div class="MenuTableContainer">
<table class="MenuTable" style="width: 62px;" cellspacing="0" cellpadding="0">
<tbody class="MenuTableBody">
<tr class="MenuTableRow">
<td class="MenuEntryNameHover" nowrap="">IT Support</td>
<td class="MenuEntrySubHover" style="background-image:url("../../../../resources/images/menu_sub.gif")" arsubmenu="0"> </td>
</tr>
</tbody>
</table>
</div>
<div class="MenuScrollDown" style="background-image: url("../../../../resources/images/menu_down.gif"); width: 62px; visibility: hidden;"></div>
Html ESI 代码 - Espirito Santo Informatica 和 IBM 外包:
<div class="MenuTableContainer">
<table class="MenuTable" style="width: 174px;" cellspacing="0" cellpadding="0">
<tbody class="MenuTableBody">
<tr class="MenuTableRow">
<td class="MenuEntryName" nowrap="">ESI - Espirito Santo Informatica</td>
<td class="MenuEntrySub" style="background-image:url("../../../../resources/images/menu_sub.gif")" arsubmenu="4"> </td>
</tr>
<tr class="MenuTableRow">
<td class="MenuEntryName" nowrap="">IBM Outsourcing</td>
<td class="MenuEntrySub" style="background-image:url("../../../../resources/images/menu_sub.gif")" arsubmenu="5"> </td>
</tr>
</tbody>
</table>
</div>
为什么不 xpath ?
//td[contains(text() , 'IT Support')]
像这样:
# 2ND MENU
actions.move_to_element(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[contains(text() , 'IT Support')]")))).click().perform()