如何从下拉列表中选择数据动态数据?

时间:2013-04-03 05:26:43

标签: selenium-ide

我是selenium IDE的新手,当我在maps.google网站上执行一些测试时,当我在搜索框中输入数据时,它会显示与之相关的数据。 例如:当我键入“i​​ndia”时,它将显示与提供的数据相关的附加数据列表,如“india bank”“india infoline”等。 如果我想从下拉列表中选择任何特定数据,那将是什么命令和目标。

提前致谢

4 个答案:

答案 0 :(得分:0)

1)使用typekeys键入“india”(它更接近键盘输入)

2)WaitForElementPresent([你的xpath] [1]或[你的xpath] index = 1) - 包含下拉列表的第一个元素以确保它存在。请记住,Selenium的运行速度通常比您的应用程序和/或浏览器快,所以每次刷新或加载时都要使用WaitForElementPresent。

3)选择你的元素选择[你的xpath] index = 1

但请确保输入的值应导致非空列表(您可能没有“印度”记录)。

===================

以下是您应该使用的代码(我在我这边检查过):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="https://www.google.com.ua/" />
<title>New Test</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">New Test</td></tr>
</thead><tbody>
<tr>
<td>open</td>
<td>/</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>gbqfq</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>gbqfq</td>
<td>bitragunta</td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//html/body/div5/table/tbody/tr/td/div</td>
<td>index=1</td>
</tr>
<tr>
<td>mouseOver</td>
<td>//html/body/div5/table/tbody/tr/td/div</td>
<td></td>
</tr>
<tr>
<td>mouseDown</td>
<td>//html/body/div5/table/tbody/tr/td/div</td>
<td></td>
</tr>
</tbody></table>
</body>

1)请将我的初始代码从<link rel="selenium.base" href="https://www.google.com.ua/" />更改为<link rel="selenium.base" href="http://maps.google.com/" /> 如果它没有帮助,试试这个:

2)尝试使用此定位器:// div [@ id ='hm'] / table / tbody / tr / td / div

如果不起作用,请尝试此

3)尝试逐步执行我的脚本(使用菜单操作 - 执行此命令)。当显示列表时,使用Firebug或类似工具进行探索以找出其xpath。也许谷歌针对不同的国家有不同的页面?

=============================================== ====

1)关于错误。[错误]元素// html / body / div5 / table / tbody / tr / td / div未找到: 只有在扩展列表时(即在搜索文本框中键入内容后)才能找到此元素

2)通过询问正确的方式你的意思是什么?当然,我不会向我提出任何听起来不对的建议。您可能想要更改的唯一方法是使用更简单的定位器作为列表。但要尽量让它先发挥作用。

3)您无法添加哪些代码?请更具体一点。

答案 1 :(得分:0)

尝试使用此代码,让我知道它对您有用。

 <tr>
       <td>open</td>
       <td>https://maps.google.co.in/</td>
       <td></td>
   </tr>
   <tr>
            <td>assertTitle</td>
           <td>Google Maps</td>
            <td></td>
   </tr>
   <tr>
            <td>type</td>
            <td>id=gbqfq</td>
            <td>indian restaurant</td>
   </tr>
   <tr>
       <td>pause</td>
       <td>1000</td>
       <td></td>
   </tr>
   <tr>
    <td>storeEval</td>
        <td>javascript:prompt(&quot; Enter what you want to from dropdown&quot;)
    </td> 
        <td>dropdown</td>
   </tr>
   <tr>
   <td>type</td>
   <td>id=gbqfq</td>
   <td>${dropdown}</td>
   </tr>
   <tr>
          <td>click</td>
      <td>id=gbqfb</td>
      <td></td>
   </tr>

答案 2 :(得分:0)

<tr>
    <td>open</td>
    <td>https://maps.google.co.in/</td>
    <td></td>
</tr>
<tr>
    <td>storeEval</td>
    <td>javascript:prompt(&quot; Enter what you want to search&quot;)</td>
    <td>search</td>
</tr>
<tr>
    <td>type</td>
    <td>id=gbqfq</td>
    <td>${search}</td>
</tr>
<tr>
    <td>storeEval</td>
    <td>javascript:prompt(&quot;Enter which you want from drop down&quot;)</td>
    <td>googlesearch</td>
</tr>
<tr>
    <td>type</td>
    <td>id=gbqfq</td>
    <td>${googlesearch}</td>
</tr>
<tr>
    <td>click</td>
    <td>id=gbqfb</td>
    <td></td>
</tr>

谢谢。

答案 3 :(得分:0)

我遇到了同样的问题,并提出了这个解决方案:

storeText | Xpath (ex: //div[3]/div/select/option[4]) | variable

selectAndWait| id=(drop down)|label=${variable}

由于每次页面加载时下拉列表中的选项都会更改,因此存储选项,然后在每次测试时调用该变量,每次都会从下拉列表中选择正确的选项。唯一的限制是下拉菜单中的选项并不总是以相同的顺序。如果您只是想选择第一个选项ALWAYS,请在Xpath中使用

.../option[1] 

希望这有帮助