我想从下拉列表中选择值。
目前我可以点击下拉列表,但无法从下拉列表中选择值。下面是我用来从下拉列表中选择值的代码。
temp.click();
driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
Select clickThis = new Select(temp);
try{
Thread.sleep(5000);
clickThis.selectByValue("India");
}catch(Exception e){
e.printStackTrace();
System.out.println("<><><><><>Not Found<><><><><><>");
}
我在框架中工作,你能告诉我相应的代码吗。请检查我正在使用的以下代码。
private boolean operateWebDriver(String operation, String Locator,
String value, String objectName) throws Exception {
boolean testCaseStep = false;
try {
System.out.println("Operation execution in progress");
WebElement temp = getElement(Locator, objectName);
if (operation.equalsIgnoreCase("SendKey")) {
temp.sendKeys(value);
}
Thread.sleep(1000);
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
if (operation.equalsIgnoreCase("Click")) {
temp.click();
}
if (operation.equalsIgnoreCase("Verify")) {
System.out.println("Verify--->" + temp);
temp.isDisplayed();
}
if (operation.equalsIgnoreCase("clickDropdown")) {
temp.click();
driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
Select clickThis = new Select(temp);
try{
Thread.sleep(5000);
clickThis.selectByValue("India");
}catch(Exception e){
e.printStackTrace();
System.out.println("<><><><><>Not Found<><><><><><>");
}
}
testCaseStep = true;
} catch (Exception e) {
System.out.println("Exception occurred operateWebDriver"
+ e.getMessage());
// Take screenshot if any testcase is not working.
System.out.println("Taking Screen Shot");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("E:\\workspace for selenium\\Simple page creator\\Snapshot\\screenshot.jpeg"));
}
return testCaseStep;
}
public WebElement getElement(String locator, String objectName)
throws Exception {
WebElement temp = null;
System.out.println("Locator-->" + locator);
if (locator.equalsIgnoreCase("id")) {
temp = driver.findElement(By.id(objectName));
} else if (locator.equalsIgnoreCase("xpath")) {
temp = driver.findElement(By.xpath(objectName));
System.out.println("xpath temp ----->" + temp);
} else if (locator.equalsIgnoreCase("name")) {
temp = driver.findElement(By.name(objectName));
}
return temp;
}
}
超文本标记语言
<select id="billing_country" name="billing_country">
<option value="">Choose Country</option>
<option value="AF">Afghanistan</option>
<option value="AL">Albania</option>
<option value="AG">Algeria</option>
<option value="AQ">American Samoa</option>
<option value="AN">Andorra</option>
<option value="AO">Angola</option>
<option value="AV">Anguilla</option>
<option value="AY">Antarctica</option>
<option value="AC">Antigua and Barbuda</option>
<option value="AR">Argentina</option>
<option value="AM">Armenia</option>
<option value="AA">Aruba</option>
<option value="AT">Ashmore and Cartier</option>
<option value="AS">Australia</option>
<option value="AU">Austria</option>
<option value="AJ">Azerbaijan</option>
<option value="BF">The Bahamas</option>
<option value="BA">Bahrain</option>
<option value="FQ">Baker Island</option>
<option value="BG">Bangladesh</option>
driver.findElement(By.id("billing_country")).click();
driver.findElement(By.xpath("//*[@id='billing_country']//*[contains(., 'India')]")).click();
试试这个。看看能不能用。你可以用“*”来代替实际的标签,但我看不出有什么理由,除非你的“billing_country”id存在于其他地方。
编辑:
正如其他地方提到的,在实际单击该项目之前,您可能需要确保该项目是可单击的,在这种情况下,您可以使用javascript将该项目滚动到视图中。
首先,你有很多不同类型的等待,这是不应该做的。为了找到一个元素并检查它的存在性,显式等待在大多数情况下都有效。混合线程。sleep
和implicit
wait将给您带来一些非常糟糕的测试执行性能
其次,使用Select
class查找下拉列表是最好的。您可以执行以下简单且易于调试的操作。
By element = driver.findElement(By.id("billing_country"));
Select foo = new Select(element);
foo.selectByValue("AF"); //should select Afghanistan. I do not see India
请看这里的API文档
通过超文本标记语言代码,我假设印度是选项的文本,如下所示:
<option value="IN">India</option>
对于这种情况,请尝试使用与Saifur回复类似的以下代码,但使用不同的方法。
By element = driver.findElement(By.id("billing_country"));
Select foo = new Select(element);
foo.selectByVisibleText("India");
如果你想使用你的框架,请分享webdriver抛出的异常。由于国家/地区列表太大,webdriver可能无法看到选项India,并会引发类似于:org的异常。openqa。硒。WebDriverException:元素在点(XXX,YYY)处不可单击。其他元素将收到单击:
我正在尝试定位一个下拉列表并从中选择一个选项,但是我无法定位下拉列表,因为没有id,名称,或任何明显的其他定位器来访问它。 我甚至尝试过使用xpath,我唯一的成功是单击下拉菜单并打开列表,但我无法从中选择任何项目。 我甚至尝试了类似的操作:String metric=“html/body/div[3]/div[2]/form/div/table/tbody/tr1/td[2]/div/a”;单击
我试图从2个Ajax下拉字段中选择一个特定的值。第一个下拉选项列表打开,但没有选择选项,这就是为什么第二个下拉列表没有绑定并且错误发生的原因 org.openqa.selenium.nosuchelementException:找不到Element:option[value=“111”]。 请帮帮我..我是硒的新手 这是我的代码..
我想根据ViewBag值过滤下面加载的ProductData dropdownlist,比如ViewBag。类别需要传递给GetProductData()的viewbag值。我怎样才能做到这一点。非常感谢。 控制器: //需要基于viewbag进行过滤。类别值
问题内容: 我有一个带有已知值的下拉列表。我想做的是使用 jQuery 将下拉列表设置为一个我知道存在的特定值。使用常规 JavaScript,我将执行以下操作: 但是,我需要使用 jQuery 来完成此操作,因为我为选择器使用了 CSS类愚蠢的[ASP.NET客户端ID …)。 这是我尝试过的一些方法: 如何使用 jQuery ? 更新资料 事实证明,我第一次做对了: 当我在上面放置一个警报时,
我正在使用剑道下拉列表,我需要一个占位符的下拉列表,当我选择下拉列表时,它不应该出现在列表中。我尝试使用optionLabel,但此值显示在列表中。 我需要一个解决方案,我可以添加一个占位符,该值不应显示为下拉列表中的选项。
我有一个搜索表单,我必须按类别搜索,这是一个下拉列表。有2个表称为成员和类别。在类别表中有两个字段ID和名称(此名称字段存储类别的名称,如银行,医院...)。成员表中有一个名为类别的字段,该字段具有与类别表ID值相同的类别ID(类别字段在成员表中是一个外键)。 这是下拉列表的代码 在这段代码中,我有几个不明白的地方。