2012-07-20 33 views
0

背景:硒选择下拉作为字符串传递变量的选项

  • 卡片纸 - 这包含了程序的详细信息,股票
  • 客户卖卡屏的股票和国家的位置 - 当你向顾客出售一张新卡,你必须输入他们的地址。一旦你把他们的国家,具体领域(州/地址行2 /邮政编码)成为强制性或自愿。

问题是两个正在使用的国家数据库是不一样的,可以有所不同。 “德国制造”的卡片显示和“德意志联邦共和国的”卖卡屏上

我的流程:

1)搜索发出预卡摆脱卡片纸的国家 - 分配这个变量为一个字符串即aString

2)出售该卡

3)在国家下拉框 - 如果aString是在该列表中,选择aString,如果没有则创建“其他thens”名单捕捉变化

我的代码始终告诉我该字符串不在列表中,countrydropdown打印输出为false,甚至当我与两国匹配

任何帮助将是测试它极大的赞赏

Boolean countrydropdown = "xpath=//select[@id='address.country']/option]".indexOf(aString) > 0; 
System.out.println("countrydropdown"); 
System.out.println(countrydropdown); 


<tr> 
    <td class="labelFormReq">*</td> 
    <td class="labelForm">Country:</td> 
    <td> 
     <select id="address.country" onchange="validateAndSubmit(this, 'selectCountryEvent');" name="address.country"> 
      <option value="">Please Select</option> 
      <option value="4">Afghanistan</option> 
      <option value="248">Alan Islands </option> 
      <option value="8">Albania</option> 
      <option value="12">Algeria</option> 
      <option value="16">American Samoa</option> 
      <option value="20">Andorra</option> 
      <option value="24">Angola</option> 
      <option value="660">Anguilla</option> 
      <option value="10">Antarctica</option> 
      <option value="28">Antigua and Barbuda</option> 
      <option value="32">Argentina</option> 
      <option value="51">Armenia</option> 
      <option value="533">Aruba</option> 
      <option value="36">Australia</option> 
     </select> 
    </td> 
</tr> 
+0

你知道写' “的XPath = //选择[@ ID = 'address.country'] /选项]”'不会奇迹般地选择任何东西,你需要用方法调用来覆盖它,对吧? – 2012-07-20 19:32:53

+0

不,我没有,当我键入//选择[@id ='address.country']/option到xpather,它带来了国家的名单,所以我应该能够索引,不应该我? – Omz 2012-07-21 00:07:54

回答

0
Boolean countrydropdown = "xpath=//select[@id='address.country']/option]".indexOf(aString) > 0; 

并不真正搜索元素。实际上,它在文本"xpath=//select[@id='address.country']/option]"中寻找aString。为了使它返回任何有用的东西,你必须用方法调用来包装它。看到这一点:

Boolean countrydropdown = selenium.isElementPresent("xpath=//select[@id='address.country']/option[text()='" + aString + "']"); 

做出一点点更具有可读性和公约感知:

boolean countryDropdown = selenium.isElementPresent("xpath=id('address.country')/option[text()='" + aString + "']"); 

它返回true当且仅当一个<option>孩子adress.country元素的文本等于存在于你的aString

或者,如果你想少oneliney:

boolean countryDropdown = false; 

String[] countryOptions = selenium.getSelectOptions("id=address.country"); 
for (String option : countryOptions) { 
    if (option.equals(aString)) { 
     countryDropdown = true; 
     break; 
    } 
} 
+0

另外,你是否确定要使用Selenium RC而不是Selenium WebDriver? Selenium RC在一年前已被弃用,并且没有任何发展(不像WebDriver),因为它受到一些严重的技术限制... – 2012-07-21 08:33:08

+1

感谢slanec,我会尽快尝试一下我可以访问系统。 – Omz 2012-07-21 08:37:36

+1

我试过使用网络驱动程序,但它在我测试的系统上无法正常工作。测试需要在IE和Web驱动程序中完成,然后继续选择下一个无线电选项卡,如果这是完全正常的话。也许我会在rc中完成我的测试,然后切换到网络驱动程序。我花了几天的时间试图让它工作! – Omz 2012-07-21 08:41:30