无法使用Selenium

时间:2018-04-10 21:14:13

标签: python selenium-webdriver jquery-chosen

我正在尝试单击使用Chosen JQuery库创建的Select Dropdown中的一个标记。

<select id="languagesSelect" data-placeholder="All languages" style="width: 302px; display: none;" class="chzn-done">


<option value="all">All languages</option>
<option value="en">English</option>
<option value="ar">Arabic</option>
<option value="zh_cn">Chinese (Simplified)</option>
<option value="zh_tw">Chinese (Traditional)</option>

</select><div id="languagesSelect_chzn" class="chzn-container chzn-container-single chzn-container-active" style="width: 302px;" title=""><a href="javascript:void(0)" class="chzn-single chzn-single-with-drop" tabindex="-1"><span>All languages</span><div><b></b></div></a><div class="chzn-drop" style="left: 0px; width: 300px; top: 30px;"><div class="chzn-search"><input type="text" autocomplete="off" style="width: 265px;"></div><ul class="chzn-results"><li id="languagesSelect_chzn_o_0" class="result-selected active-result highlighted" style="">All languages</li><li id="languagesSelect_chzn_o_1" class="active-result" style="">English</li><li id="languagesSelect_chzn_o_2" class="active-result" style="">Arabic</li><li id="languagesSelect_chzn_o_3" class="active-result" style="">Chinese (Simplified)</li><li id="languagesSelect_chzn_o_4" class="active-result" style="">Chinese (Traditional)</li><li id="languagesSelect_chzn_o_5" class="active-result" style="">Hungarian</li><li id="languagesSelect_chzn_o_14" class="active-result" style="">Italian</li><li id="languagesSelect_chzn_o_15" </ul></div></div>
</div>

以下是我尝试选择英语&#39;从下拉列表中:

field_language_select = Select(driver.find_element_by_id('languagesSelect'))
field_language_select.select_by_visible_text('English')

但是我收到此错误:

ElementNotVisibleException: element not visible: Element is not currently visible and may not be manipulated
  (Session info: chrome=65.0.3325.181)
  (Driver info: chromedriver=2.37.544315 (730aa6a5fdba159ac9f4c1e8cbc59bf1b5ce12b7),platform=Windows NT 10.0.16299 x86_64)

我试过了:

  • 在下拉列表上执行click()并向下发送箭头键,然后按Enter键。我收到了WebDriverException: unknown error: cannot focus element
  • 通过actions.move_to_element(div_element)移动到select标记的div,但它没有改变任何内容。

如何设法从该下拉列表中选择元素?

4 个答案:

答案 0 :(得分:1)

通过隐藏真正的select语句并使用divs模拟它来选择作品。

您需要找到可以发送提示文本的输入字段,然后找到包含选项列表的div。获得列表后,单击该列表中的正确项目。

删除类似。您需要找到包含所选选项列表的div,然后单击正确的项目。

答案 1 :(得分:0)

你有一个例外,因为元素是不可见的,同样你需要等待片刻,直到元素准备好找到。您可以使用driver.sleep()Explicit Wait方法找到它。

答案 2 :(得分:0)

您首先需要知道元素如何与用户交互。

在选择中,您需要先点击输入字段,然后在提供的框中输入您的密钥。

我就是这样做的(我使用的是 .Net)

var eleChosen = driver.FindElementById("BodyContent_Element_chosen");
eleChosen.Click();
var eleInput = eleChosen.FindElement(By.XPath(".//input"));
jenisNaskahDinas.SendKeys("First Choice");
jenisNaskahDinas.SendKeys(Keys.Tab);

答案 3 :(得分:-1)

由于SELECT,您发布HTML时display: none标记目前不可见。硒被设计成不与不可见元素相互作用。如果没有指向页面的链接,很难说解决方案是什么,但您需要像用户那样处理这个问题...用户会做什么来导致该下拉列表被暴露?一旦你搞清楚了,编写执行这些用户操作的代码就应该很好。