我是python和selenium webdriver的新手。 html代码的示例结构是
<li class="dropdown env-dropdown">
::before
<a class="dropdown-toggle" href="">
<i class="nav-icon fa fa-plug">
::before
</i>
<span id="configured-env">ENVNAME1</span>
</a>
<ul class="dropdown-menu env-dropdown-menu env-menu-scroll">
<input id="selectedEnv" name="envConfigV0.userPreference.env.environmentId" value="" type="hidden>
<li>
<div class="spinner-container" style="display:block;"> </div>
<i class="fa fa-refresh fa-spin spinner-tsg"></i>
</div>
</li>
<li class="env-data">
<a id="environmentList0" class="dropdown-toggle" onclick="confirmEnvironmentChange{0}" href="#" data-toggle="modal">
ENVNAME0
<input id ="environmentId0" name="#env.name" value="11" type="hidden">
</a>
</li>
<li class="env-data divider"></li>
<li class="env-data">
<a id="environmentList2" class="dropdown-toggle" onclick="confirmEnvironmentChange{2}" href="#" data-toggle="modal">
ENVNAME2
<input id ="environmentId2" name="#env.name" value="6" type="hidden">
</a>
</li>
<li class="env-data divider"></li>
<li class="env-data">
<a id="environmentList3" class="dropdown-toggle" onclick="confirmEnvironmentChange{3}" href="#" data-toggle="modal">
ENVNAME3
<input id ="environmentId3" name="#env.name" value="9" type="hidden">
</a>
</li>
<li class="env-data divider"></li>
</ul>
::after
</li>
默认的configured-env是下拉环境下的ENVNAME1。我可以使用以下代码将鼠标悬停在下拉菜单上:
env_dropdown = self.driver.find_element_by_xpath('//li[@class = "dropdown env-dropdown"]')
ActionChains(self.driver).move_to_element(env_dropdown).perform()
我想通过单击文本“ENVNAME2”将configured-env更改为ENVNAME2。但在尝试各种选择后,我无法实现这一目标。请你帮我解决这个问题。
使用select和options标记不会生成此下拉列表。因此,从selenium中选择class将不起作用。
解决方法是:
我提供的代码为2,你可以为第一部分编写自己的代码。
drop_down = self.driver.find_elements_by_css_selector("li.env-data a")
for values in drop_down:
if values.text==ENVNAME2:
values.click()
self.driver.find_element_by_xpath("//li[@class = 'dropdown env-dropdown']/option[text()='YOUR_NAME_ELEMENT_OF_LIST']").click()
无论如何你确定它是一个下拉菜单吗?通常下拉菜单html是这样的:
<select name="cars">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
您的示例看起来更像是一个列表项:https://www.w3schools.com/tags/tag_li.asp
在过去,我使用javascript解决了很多问题。您可以尝试查看这是否有效
driver.execute_script("document.getElementById('configured-env')='ENVNAME2'")