2017-07-27 104 views
-1

我从Excel文件发送定义的数据。我尝试了一些代码,但他们没有从Excel文件中选择所有的数据,在某些时候,代码给了我没有找到的WebElement异常。需要帮助 - Selenium webdriver-点击可见列表中的元素不起作用

下面是HTML代码:

<div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix"> 
    <div id="addDialog" class="hidden ui-dialog-content ui-widget-content" style="display: block; width: auto; min-height: 30px; height: auto; max-height: 351.05px; overflow-y: auto;"> 
     <div class="field-container"> 
     <fieldset class="field-container"> 
      <legend>Contracts:</legend> 
      <a class="select-all" href="#">Select All</a> 
      <a class="deselect-all" href="#">Deselect All</a> 
      <select id="addContract" class="searchable" multiple="multiple" style="position: absolute; left: -9999px;"> 
       <option value="93370956">93370956</option> 
       <option value="93796167">93796167</option> 
       <option value="94203239">94203239</option> 
      </select> 
      <div id="ms-addContract" class="ms-container"> 
       <div class="ms-selectable"> 
        <input class="search-input" type="text" placeholder="filter" autocomplete="off"/> 
         <ul class="ms-list" tabindex="-1"> 
          <li id="86355560-selectable" class="ms-elem-selectable"> 
           <span>93370956</span> 
          </li> 
          <li id="202890296-selectable" class="ms-elem-selectable"> 
           <span>93796167</span> 
          </li> 
          <li id="938848030-selectable" class="ms-elem-selectable"> 
           <span>94203239</span> 
          </li> 
         </ul> 
       </div> 
      </div> 

需要从列表中选择值。 努力做到: 这一努力代码工作,但它仅选择一个值,然后给了例外

WebDriverWait Wait=new WebDriverWait(driver, 10); 
      Wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//ul[@class='ms-list']/li/span"))); 
      //now you can find element 
      List<WebElement>options=driver.findElements(By.xpath("//ul[@class='ms-list']/li/span[contains(text(),'"+testData+"')]")); 
      for (WebElement option: options) { 
      if(testData.equals(option.getText())) option.click(); 
      } 

上面的代码尝试,但它只能选择一个值!

WebDriverWait Wait = new WebDriverWait(driver, 10); 
     Wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='ms-addContract']//descendant::div[@class='ms-selectable']/ul[@class='ms-list']]//span"))); 

List<WebElement> options = driver.findElements(By.xpath("//*[@id='ms-addContract']//descendant::div[@class='ms-selectable']/ul[@class='ms-list']]//span[contains(text(), '"+testData+"')]")); 
      for (WebElement option : options) { 
       if(testData.equals(option.getText())) 
       option.click();--tried this xpath-no success 

WebDriverWait wait = new WebDriverWait(driver, 10); 
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*[@id='ms-addContract']/div[1]/input"))).click(); 
    driver.findElement(By.xpath(".//*[@id='ms-addContract']/div[1]/input")).sendKeys(testData); 
    WebDriverWait wait1 = new WebDriverWait(driver, 10); 
    wait1.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*[@id='ms-addContract']/div[1]/input"))).sendKeys(Keys.ARROW_DOWN,Keys.ARROW_DOWN,Keys.SPACE); 
    //Clear the input text value. 
    driver.findElement(By.xpath(".//*[@id='ms-addContract']/div[1]/input")).clear();---worked but not satisfactory 

请需要帮助找到的元素。我正在使用关键字驱动框架读取excel文件中的值。

+0

10哪些元素失败?目前很难理解你的代码在哪里失败。 –

+0

@MadisKangro它不从span类中选择值。当我运行以上尝试代码时,他们只是坚持选择所有按钮。 –

+0

add stacktrace =) –

回答

0

听起来好像你正在试图获取包含在ul元素中的所有span元素(尽管如果我错了,请纠正我)。这是你正在使用的代码:

List<WebElement>options = driver.findElements(By.xpath("//ul[@class='ms-list']/li/span[contains(text(),'"+testData+"')]")); 

在你的情况下,这个XPath将只返回1个值。这是因为您试图将每个跨度的内容与输入值“testData”匹配。如果你想获得UL内部的所有span元素,然后使用:

List<WebElement>options = driver.findElements(By.xpath("//ul[@class='ms-list']/li/span")); 

这个XPath将选择完成选择列表中的所有span元素。如果您只需要选择testData中包含文本的span元素,则可以遍历该列表并选择适当的元素:

ArrayList<WebElement> optionsInTestData = new ArrayList<WebElement>(); 
for(WebElement element: options){ 
    for(String data: testData){ 
     if(element.getText() == data){ 
      optionsInTestData.add(element); 
     } 
    } 
} 
+0

无法实例化类型列表&只能遍历数组或java.lang的实例。Iterable获取List和for(String data:testData)的这些错误。试图修改它。但它仍然不起作用。有testData的List,所以它应该逐一选择它们。 –

+0

我有同样的情况,我用\t列表 options = driver.findElements(By.xpath(“// ul [@ id ='ui-id-2']/li”)); \t \t \t为(WebElement选项:选项){ \t \t \t如果(testData.equals(option.getText())) \t \t \t option.click(); \t \t \t}。它正在为该下拉列表工作。 –

+0

对不起,我用Java编程已经有一段时间了。我已经更新optionsInTestData是一个ArrayList而不是一个List对象。这应该让你初始化它。 – stewartm

相关问题