我试图从Selenium Webdriver的下拉列表中选择一个值。但每次我最终在控制台中出现错误
这是我的网站URL,下面是元素的快照:
我已尝试使用以下代码,但它无效
Select dropdown= new Select(driver.findElement(By.xpath("//div[@on-dimension-select = 'selectQuantityDimension']/*[@role='combobox']")));
dropdown.selectByValue("4");
获得以下例外: -
线程中的异常" main" org.openqa.selenium.support.ui.UnexpectedTagNameException:Element 应该是"选择"但是" span"构建信息:版本: ' unknown',revision:' 1969d75',time:' 2016-10-18 09:43:45 -0700'
也尝试过这种方式:
driver.findElement(By.xpath("//div[@on-dimension-select = 'selectQuantityDimension']/*[@role='combobox']")).click();
Select dropdown= new Select(driver.findElement(By.xpath("//div[@on-dimension-select = 'selectQuantityDimension']/select/")));
dropdown.selectByValue("4");
这次错误是:
线程中的异常" main" org.openqa.selenium.InvalidSelectorException:无效的选择器:无法使用 使用xpath表达式定位元素 // div [@ on-dimension-select =' selectQuantityDimension'] / select / 由于以下错误:SyntaxError:无法执行 '评价' on' Document':字符串' // div [@ on-dimension-select = ' selectQuantityDimension'] /选择/'不是有效的XPath表达式。
这是相同的HTML代码:
<div class="ng-isolate-scope ng-pristine ng-valid" ng-show="!docked" ng-model="variantOptionsModel" on-dimension-select="selectQuantityDimension" docked="docked">
<label>Quantity:</label>
<select class="accessory-option ng-pristine ng-valid" ng-model="model.selectedQuantity" ng-options="quantity for quantity in model.quantityDropDownValues track by quantity" ng-change="quantityClick()" data-qa-quantity-value="" style="display: none;">
<option value="1" selected="selected" label="1">1</option>
<option value="2" label="2">2</option>
<option value="3" label="3">3</option>
<option value="4" label="4">4</option>
<option value="5" label="5">5</option>
<option value="6" label="6">6</option>
</select>
<span id="" class="selectboxit-container selectboxit-container" role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-expanded="false" aria-owns="">
<span id="" class="selectboxit accessory-option ng-pristine ng-valid selectboxit-enabled selectboxit-btn" name="" tabindex="0" unselectable="on" data-qa-quantity-value="">
<ul class="selectboxit-options selectboxit-list" tabindex="-1" role="listbox" aria-hidden="true" style="max-height: 217px; top: -217px; display: none;">
</span>
</div>
我不确定我做错了什么。
答案 0 :(得分:1)
以下是您的问题的答案:
以下是导航到“Why isn't this code causing a ConcurrentModificationException?”的工作代码块,计算Quantity
DropDown中的条目数,将输出打印到控制台,最后选择Quantity
为<强> 4 &amp;打印到控制台:
package demo;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Q44559302_dropdown_select {
public static void main(String[] args) {
String innerhtml = null;
System.setProperty("webdriver.gecko.driver", "C:\\your_directory\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get("https://www.o2.co.uk/shop/smartwatches/samsung/gear-s2/#contractType=nonconnected");
driver.findElement(By.xpath("//form[@id='chooseTariffForm']//div[@class='quantiy-picker-wrapper']/div/span")).click();
List<WebElement> element_list = driver.findElements(By.xpath("//form[@id='chooseTariffForm']//div[@class='quantiy-picker-wrapper']/div/span/ul/li/a"));
System.out.println("Number of Elements : "+element_list.size());
for (int i=0; i<element_list.size(); i++)
{
WebElement my_element = element_list.get(i);
innerhtml = my_element.getText();
if(innerhtml.contentEquals("4"))
{
my_element.click();
break;
}
}
System.out.println("Value selected from Dropdown is : "+innerhtml);
}
}
如果这回答你的问题,请告诉我。
答案 1 :(得分:0)
您不能使用选择类,因为页面选择框没有选择标记。
要选择该选项,首先单击选择框,然后单击您想要的列表选项。
以下代码将点击第一个选项
//click on dropdown
driver.findElement(By.xpath("//div[@on-dimension-select = 'selectQuantityDimension']/*[@role='combobox']")).click();
//click on first option 1
driver.findElement(By.xpath("//div[@on-dimension-select = 'selectQuantityDimension']/*[@role='combobox']/ul/li[@data-val=1]/a")).click();
答案 2 :(得分:0)
下拉列表是Angular,您粘贴的DOM的Select Tag指向网页中的其他位置。
点击数量下拉列表:
driver.findElement(by.xpath("//div[@class='quantiy-picker-wrapper']//span[@class='selectboxit-container selectboxit-container']")).click();
现在,用户可以看到下拉选项。
从下拉列表中选择一个值:
//am selecting quantity 4
driver.findElement(by.xpath("//div[@class='quantiy-picker-wrapper']//span[@class='selectboxit-container selectboxit-container']//li[4]")).click();
希望这会对你有所帮助。感谢。