我有以下检查元素标识,用于在UI屏幕中显示一些字段的下拉列表。
DropDown值:
检查过的元素ID:
<select id="form1:PartialSysAdminKey_adminContractIdField" name="form1:PartialSysAdminKey_adminContractIdField" class="selectOneMenu" size="1">
如果下拉列表没有值,则会出现这种情况。
我需要显示一个sysout日志,只有当这个下拉列表至少有一个值时才会显示。
有人可以建议我如何将其纳入我的Selenium测试中?
目前,我有以下代码检查服务器是否已启动并测试登录。
package testPackage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class TestClass {
public static void main(String[] args) {
ChromeOptions options = new ChromeOptions();
options.addArguments("headless");
System.setProperty("webdriver.chrome.driver", "D:\\Softwares\\chromedriver_win32\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://bigdata/steward.jsp");
if (driver.getTitle().equalsIgnoreCase("Login")) {
serverStatus = "UP";
} else {
serverStatus = "DOWN";
}
System.out.println("Server is " + serverStatus + ".");
if (serverStatus.equalsIgnoreCase("UP")) {
driver.findElement(By.id("username")).sendKeys("username");
driver.findElement(By.id("password")).sendKeys("password");
driver.findElement(By.id("login")).click();
String newUrl = driver.getCurrentUrl();
if (newUrl.equalsIgnoreCase("https://bigdata/error.jsp")) {
System.out.println("Incorrect username/password.");
} else {
System.out.println("Logged in successfully.");
}
} else {
System.out.println("Login could not be done.");
}
driver.quit();
}
}
答案 0 :(得分:2)
如果Drop Down由Select标签组成,那么您可以使用Selenium的Select类。
Select select = new Select(WebElement);
select.selectByIndex(int index);
select.selectByValue(String value);
select.selectByVisibleText(String text);
如果它是由Divs和span组成的,那么你可能想要使用这段代码:
List<WebElement> options = driver.findElements(by.xpath(" your locator"));
for(WebElement element : options){
if(element.getText().equals(" your value from drop down")){
element.click();
}
}
更新:
HTML文件:
<html>
<head>
<title>StackOverFlow Problems </title>
</head>
<body>
<select id="form1:PartialSysAdminKey_adminContractIdField" name="form1:PartialSysAdminKey_adminContractIdField" class="selectOneMenu" size="1">
<option value=" "></option>
<option value="Lstitem1">List item1</option>
<option value="Lstitem2">List item2</option>
<option value="Lstitem3">List item3</option>
</select
</body>
</html>
使用Java + Selenium的自动化代码:
public class Mike {
static WebDriver driver;
static WebDriverWait wait;
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "D:\\Automation\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
wait = new WebDriverWait(driver, 20);
driver.get("file:///C:/Users/HunteR/Desktop/Automation/abc.html");
Thread.sleep(3000);
Select select = new Select(driver.findElement(By.cssSelector("select[id*='adminContractIdField']")));
select.selectByValue("Lstitem3");
}
}
它在我的机器上工作得非常好。如果您对此有任何疑虑,请与我们联系。
注意:
Thread.sleep(3000)在我的代码中用于可视化目的。
答案 1 :(得分:1)
根据上述情况,以下代码可用于相应地检查下拉列表和打印sysout日志中的元素数量。在wait.until行中,第二个参数&#39; number&#39;应根据下拉列表中的默认选项替换为0或1。即如果下拉列表为空,则使用0.如果下拉列表中有默认选项&#39; - 选择 - &#39;,则使用1.所以基本上你将要做的是,等待是否有任何选项下拉列表,超过默认内容。您可以根据应用程序加载时间更改等待时间。
try {new WebDriverWait(driver, 15).until(ExpectedConditions.numberOfElementsToBeMoreThan(By.xpath("//select[@id='form1:PartialSysAdminKey_adminContractIdField']/option"), number));
System.out.println("Drop down has at least one value present");
} catch (Exception e) {
System.out.println("No options in the drop down");
}
编辑:另一种方式可能是
List<WebElement> list_Items=driver.findElements(By.xpath("//select[@id='form1:PartialSysAdminKey_adminContractIdField']/option"));
if(list_Items.size()>1){
System.out.println("Drop down has at least one value present");
}
else{
System.out.println("No options in the drop down");
}
答案 2 :(得分:1)
根据您提供的 HTML ,您可以使用以下代码块:
WebElement elem = driver.findElement(By.xpath("//select[@class='selectOneMenu' and contains(@id,'PartialSysAdminKey_adminContractIdField')]"));
Select mySelect = new Select(elem);
//selecting the first item by index
mySelect.selectByIndex(1);
//selecting the second item by value
mySelect.selectByValue("Lstitem2");
//selecting the third item by text
mySelect.selectByVisibleText("List item1");
答案 3 :(得分:1)
<select id="ddMonth" name="ddMonth" style="color:#000;margin:0;min-width:65px;" onchange="Setoptvariable()" class="reqCheck">
<option value="">MM</option>
<option value="01">Jan</option>
<option value="02">Feb</option>
<option value="03">Mar</option>
<option value="04">Apr</option>
<option value="05">May</option>
<option value="06">Jun</option>
<option value="07">Jul</option>
<option value="08">Aug</option>
<option value="09">Sep</option>
<option value="10">Oct</option>
<option value="11">Nov</option>
<option value="12">Dec</option>
</select>
考虑上面是你的下拉。这是为了选择一个月。我们可以通过三种方式从下拉列表中选择一个选项。
方法#1:
new Select(driver.findElement(By.id("ddMonth"))).selectByIndex(0); // This will select 'MM' option in the dropdown
new Select(driver.findElement(By.id("ddMonth"))).selectByIndex(1); // This will select 'Jan' option in the dropdown
new Select(driver.findElement(By.id("ddMonth"))).selectByIndex(2); // This will select 'Feb' option in the dropdown
方法#2:
new Select(driver.findElement(By.id("ddMonth"))).selectByValue(); // This will select 'MM' option in the dropdown
new Select(driver.findElement(By.id("ddMonth"))).selectByValue("01"); // This will select 'Jan' option in the dropdown
new Select(driver.findElement(By.id("ddMonth"))).selectByValue("02"); // This will select 'Feb' option in the dropdown
方法#3:
new Select(driver.findElement(By.id("ddMonth"))).selectByVisibleText("MM"); // This will select 'MM' option in the dropdown
new Select(driver.findElement(By.id("ddMonth"))).selectByVisibleText("Jan"); // This will select 'Jan' option in the dropdown
new Select(driver.findElement(By.id("ddMonth"))).selectByVisibleText("Feb"); // This will select 'Feb' option in the dropdown
希望这会有所帮助。
答案 4 :(得分:0)
Select oSelect = new Select(driver.findElement(By.id("PartialSysAdminKey_adminContractIdField")));
oSelect.selectByValue("List item1");
说明:首先创建一个select节点元素的对象thn,通过该对象调用函数selectByValue并传递给你 值。