如果下拉列表具有相同的ID,如何从下拉列表中选择一个选项

时间:2016-03-25 14:42:26

标签: ruby capybara

我正在尝试从下拉列表中选择一个值。

这是HTML:

<select id="selectFilter">
  <option value></option>
  <option value="FEE">FEE</option>
  <option value="PW">PW</option>

我选择的代码是:

select('PW', :from => 'selectFilter')

我收到错误,因为身份selectFilter在两个地方是相同的

Ambiguous match, found 2 elements matching "selectFilter" (Capybara::Ambiguous)

如何选择我需要的选项?

2 个答案:

答案 0 :(得分:0)

HTML protected void onActivityResult(int requestCode, int resultCode, Intent intent) { Log.d(TAG, "onActivityResult"); if ((requestCode == mFilechooserResultcode) && (resultCode == RESULT_OK)) { if ((mFIlePathCallback == null) && (mFIlePathCallbackLollipop == null)) { return; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //lollipop + String dataString = intent.getDataString(); if (dataString != null) { Uri[] result = new Uri[]{Uri.parse(dataString)}; mFIlePathCallbackLollipop.onReceiveValue(result); mFIlePathCallbackLollipop = null; } } else { //kitkat - Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData(); mFIlePathCallback.onReceiveValue(result); mFIlePathCallback = null; } } } 属性应该在页面上是唯一的。您需要重命名至少一个id s,以免它们发生碰撞。

如果由于某种原因你真的不能/不会选择独特selectFilter s,Capybara的select也会找到idname s,但是你必须提供一些独特的东西才能找到合适的元素。

答案 1 :(得分:0)

如果你确实有两个具有相同id的元素,那么你真的应该修复你的HTML。另一方面,如果您有一个具有该ID的选择,而另一个选择具有该名称,占位符或标签文本,则可以执行

find('#selectFilter').find(:option, 'PW').select_option

可以通过id找到并且可以解决您的问题。

如果你确实有两个带有id的元素并且拒绝/无法修复HTML,那么你可以将初始查找范围限定在页面的某个部分,如

find('#some_section').select('PW', from: 'selectFilter')

或者如果页面上只有一个'PW'选项,则可以执行

find(:option, 'PW').select_option
相关问题