我在主页上有3个选项,它们具有相同的类名和不同的值,请参见下面的代码:
第一选项菜单
<select class="form-control mandatory" tabindex="4" required="" autocomplete="off" name="SearchHome.documentType">
<option value=""></option>
<option value="VISA">Visa</option>
<option value="EDF">EDF</option>
</select>
第二选项菜单
<select class="form-control mandatory" tabindex="5" required="" autocomplete="off" name="SearchHome.documentSubType">
<option value=""></option>
<option value="BusinessVisa">Business Visa</option>
<option value="VisitantVisa">Visitant Visa</option>
<option value="WorkingVisa">Working Visa</option>
<option value="ResidenceVisa">Residence Visa</option>
<option value="StudentVisa">Student Visa</option>
<option value="TouristVisa">Tourist Visa</option>
<option value="VisaForTemporaryResidence">Visa for Temporary Residence</option>
<option value="VisaSportsCulture">Visa Sports + Culture</option>
<option value="VisaForInvestmentActivity">Visa For Investment Activity</option>
</select>
第三选项菜单
<select class="form-control mandatory" tabindex="6" required="" autocomplete="off" name="SearchHome.useCaseName">
<option value=""></option><option value="EXTENSION">EXTENSION</option>
</select>
第二个和第三个选项菜单中的值是动态的。i、 e.根据我在第一个选项菜单中选择的内容,第二个选项菜单中的值将不同。根据我在第二个选项菜单中选择的值,第三个选项菜单中的值也会不同。
我正在尝试自动选择第一个选项值(已经选择了),但是当我尝试选择第二个选项值时,总是会得到第一个选项值:(
我试着换标签,但没用。
package co.edureka.selenium.inCountry;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.chrome.ChromeDriver;
public class BusinessVisaHappyPath {
static WebDriver driver;
public static void main(String[] args) {
basicSettings();
loginTestCase("getidadmin@boca01", "12345");
selectVisaDocumentHomePage();
//CloseAndQuitWebDriver();
}
// this is working
private static void selectVisaDocumentHomePage() {
// Wait until ExpectedConditions is Fulfilled
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy((By.xpath("//*[@class=\"form-control mandatory\"]"))));
/*
* Select dropDown = new
* Select(driver.findElement(By.xpath("//*[@class=\"form-control mandatory\"]"))
* ); dropDown.selectByValue("VISA"); WebElement element =
* driver.findElement(By.xpath("//*[@class=\"form-control mandatory\"]"));
* element.sendKeys(Keys.TAB);
*/
WebElement mySelectElm = driver.findElement(By.xpath("//*[@class=\"form-control mandatory\"]"));
Select mySelect= new Select(mySelectElm);
List<WebElement> options = mySelect.getOptions();
for (WebElement option : options) {
if (option.getText().equalsIgnoreCase("VISA")) {
option.click();
}
}
mySelectElm.sendKeys(Keys.TAB);
String at = driver.getTitle();
String et = "GetID Webg";
if (at.equalsIgnoreCase(et))
{
System.out.println("Select Document Test, passed");
selectVisaDocumentTypeHomePage();
} else {
System.out.println("Select Document Test, not passed");
}
}
// second option is not working :(
private static void selectVisaDocumentTypeHomePage() {
// Wait until ExpectedConditions is Fulfilled
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
WebElement element = driver.findElement(By.xpath("//*[@class=\"form-control mandatory\"]"));
element.sendKeys(Keys.ENTER);
/*
* Select dropDown = new Select(driver.findElement(By.
* xpath("//*[(@class=\"form-control mandatory\") and (@name=\"SearchHome.documentType\")]"
* ))); dropDown.selectByValue("BusinessVisa");
*/
WebElement mySelectElm = driver.findElement(By.xpath("//*[(@class=\"form-control mandatory\") and (@name=\"SearchHome.documentType\")]"));
Select mySelect= new Select(mySelectElm);
System.out.println(mySelect.getOptions().get(1).getText());
List<WebElement> options = mySelect.getOptions();
for (WebElement option : options) {
if (option.getText().equalsIgnoreCase("BusinessVisa")) {
option.click();
System.out.println("Select Document Type Test, passed");
}
}
System.out.println("Select Document Type Test, not passed");
}
private static void loginTestCase(String login, String password){
driver.findElement(By.xpath("//input[contains(@class, 'form-control margin-from-bottom')]")).sendKeys(login);
driver.findElement(By.xpath("//input[contains(@class, 'inputMask text-center-sm form-control margin-from-bottom')]")).sendKeys(password);
driver.findElement(By.xpath("//button[contains(@class, 'btn btn-default btn-block')]")).click();
String at = driver.getTitle();
String et = "GetID Webg";
if (at.equalsIgnoreCase(et))
{
System.out.println("Login Test, passed");
} else {
System.out.println("Login Test, not passed");
}
}
private static void basicSettings() {
System.setProperty("webdriver.chrome.driver", "C:\\Users\\admin\\eclipse-workspace\\SeleniumProject\\chromedriver_win32\\chromedriver.exe");
driver = new ChromeDriver();
driver.get("http://10.35.1.4:10720/login/");
//driver.manage().window().maximize();
}
// not using this method for now
private static void CloseAndQuitWebDriver() {
driver.close();
driver.quit();
}
如何使用正确的值选择第二个和第三个下拉选项卡?
2条答案
按热度按时间d8tt03nd1#
使用
name attribute
在xpath
它将唯一地标识下拉列表元素。下拉列表1:
下拉列表2:
下拉列表3:
实际上你的代码
f2uvfpb92#
选择
visa作为
<option>
从第一个下拉列表中,商务签证
<option>
从第二个下拉列表中,扩展为
<option>
从第三个下拉列表中,你需要诱导webdriverwait
elementToBeClickable()
您可以使用以下任一定位器策略:使用cssselector和
selectByVisibleText()
:使用xpath和
selectByValue()
: