Selenium Python我试图使用XPATH或CSS选择器从嵌套的span标签中选择一个下拉列表

时间:2015-10-23 09:38:53

标签: css selenium xpath selenium-webdriver webdriver

我正在尝试为下拉元素设计XPATH或CSS,这似乎是嵌套的span标签。 我想找到标签 我可以在下拉列表上方找到文本,但我无法沿着span标签找到下拉元素。

我有XPATH来查看下拉列表上方的文本。 XPATH是:

//span[contains(text(), "Select a data preview to import configuration from")]

如果我尝试使用前面的:: span [2],那就太过分了。

//span[contains(text(), "Select a data preview to import configuration from")]/preceding::span[2]

HTML代码段为:

<div class="GPI5XK1CM" style="padding-right: 16px;position:relative;outline:none;" __idx="0" onclick="">
<div style="position:absolute;display:none;"/>
<div>
<span/>
<span>
<span title="" style="font-weight:bold;">Select a data preview to import configuration from</span>
</span>
<span/>
<span>
<span class="" title="" style="display:block;"/>
</span>
<span/>
<span/>
<span/>
<span/>
<span/>
<span>
<span class="" title="None" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;">
    <select tabindex="-1">
        <option selected="selected" value="None">None</option>
        <option value="CRMINVALID_07102015">CRMINVALID_07102015</option>
        <option value="LADEMO_crm2_Chrome">LADEMO_crm2_Chrome</option>
        <option value="LADEMO_CRM_DONOTCHANGE_CHROME">LADEMO_CRM_DONOTCHANGE_CHROME</option>
        <option value="LADEMO_ESCR_DO_NO_CHANGE_CHROME">LADEMO_ESCR_DO_NO_CHANGE_CHROME</option>
        <option value="Lademo_odb_Data">Lademo_odb_Data</option>
        <option value="test">test</option>
    </select>
    </span>
    </span>
</div>

我可以用什么XPATH或CSS来下载? CSS更快,这将是好的。

我想我现在已经完成了一项工作,但不确定这是否是一个很好的方法。 这个对我有用:

//span[contains(text(), "Select a data preview to import configuration from")]/preceding::span[1]//../span//../select
  • 首先使用文本搜索span元素选择数据预览以从
  • 导入配置
  • 然后找到第一个span标签/ preceding :: span [1]
  • 然后找到第一个span标记//../ span
  • 下面的所有span标记
  • 然后在span标签//../ select
  • 中的任何位置找到下拉列表

使用//../select如果结构发生变化,它仍然有用。

这是正确的方法吗?

谢谢, 里亚兹

3 个答案:

答案 0 :(得分:0)

我有几个你可以尝试的CSS选择器。第一个应该足够但如果没有,第二个应该是唯一的。

"select[tabIndex='-1']"
"span[title='None'] > select[tabIndex='-1']"

答案 1 :(得分:0)

您可以使用以下xpath获取所有选项值:

//跨度[@标题= '无'] /选择/选项/文本()

答案 2 :(得分:0)

CSS的一个例子。这假定只有一个标题为“无”的范围。

String urlIcon = SERVICEURL + "/GetWeatherIcon/" + weather.getWeather().get(0).getIcon();
InputStream iconStream = ExecuteRequestService(urlIcon);
BufferedReader rdIcon = new BufferedReader(new InputStreamReader(iconStream));
String jsonIcon = rdIcon.readLine();
JSONObject objIcon = new JSONObject(jsonIcon);
JSONArray jsonArray = objIcon.getJSONArray("GetWeatherIconResult");
byte[] bytes = new byte[jsonArray.length()];
for(int i=0; i<jsonArray.length(); i++){
   bytes[i] = (byte) jsonArray.getLong(i);
}
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
weather.setImage(bmp);

你也可以逃脱:

var e = document.getElementById('yourElement');
var marLeft = getStyle(e, 'margin-left');
alert(marLeft);
/* and if a number needs to be in px... */
alert(marLeft + 'px');

////////////////////////////////////

/***
 * get live runtime value of an element's css style
 *   http://robertnyman.com/2006/04/24/get-the-rendered-style-of-an-element
 *     note: "styleName" is in CSS form (i.e. 'font-size', not 'fontSize').
 ***/
var getStyle = function (e, styleName) {
    var styleValue = "";
    if(document.defaultView && document.defaultView.getComputedStyle) {
        styleValue = document.defaultView.getComputedStyle(e, "").getPropertyValue(styleName);
    }
    else if(e.currentStyle) {
        styleName = styleName.replace(/\-(\w)/g, function (strMatch, p1) {
            return p1.toUpperCase();
        });
        styleValue = e.currentStyle[styleName];
    }
    return styleValue;
}