我想从下拉列表中选择值。
目前,我可以点击下拉列表但无法从下拉列表中选择值。以下是我用于从下拉列表中选择值的代码。
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;
}
}
HTML
<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>
答案 0 :(得分:1)
根据HTML代码,我假设印度是以下选项的文字:
<option value="IN">India</option>
对于这种情况,请尝试使用类似于Saifur的回复的以下代码,但使用不同的方法。
By element = driver.findElement(By.id("billing_country"));
Select foo = new Select(element);
foo.selectByVisibleText("India");
如果您想使用您的框架,请分享webdriver抛出异常。由于国家/地区列表太大,选项India可能不会显示webdriver单击并且会抛出类似的异常: org.openqa.selenium.WebDriverException:元素在点(XXX,YYY)处不可点击。其他元素将收到点击:
答案 1 :(得分:0)
首先,你有很多混合不同类型的等待,这是不应该做的。为了找到一个元素并检查它是否存在,显式等待在大多数情况下起作用。混合thread.sleep
和implicit
等待会给你一些非常糟糕的测试执行性能
其次,使用Select
类找到下拉列表是最好的。您可以执行以下操作,简单易用。
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文档here
答案 2 :(得分:0)
driver.findElement(By.id("billing_country")).click();
driver.findElement(By.xpath("//*[@id='billing_country']//*[contains(., 'India')]")).click();
试试这个。看看它是否有效。您可以将'*'替换为实际标签,但除非您在其他地方存在“billing_country”ID,否则我没有理由这样做。
编辑:
如其他地方所述,您可能需要确保该项目在实际点击之前是可点击的,在这种情况下,您可以使用javascript将项目滚动到视图中。
答案 3 :(得分:0)
在你的html中,<option value="IN">India</option>
应该是印度。
你有:clickThis.selectByValue("IN");
如果您尝试clickThis.selectByVisibleText("India");
t将起作用。
答案 4 :(得分:0)
driver.findElement(By.xpath("//*[@id='billing_country']//*[contains(., 'India')]")).click();
通过使用这个测试用例只能选择一个值,如果我给了另一个值而不是&#34;印度&#34;但这是以印度为例,如果对此测试用例有任何更正,请告诉我。