我正在尝试从下拉列表中选择一个项目,因为在html
标记中没有用作选择下拉列表,然后我习惯通过操作选择下拉项。
我的问题是在这种情况下选择下拉项目的代码的标准方法,或者我应该更改我的代码。
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.Select;
public class test
{
static WebDriver driver;
public static void main(String[] args)
{
System.setProperty("webdriver.chrome.driver", "D:\\rakesh\\software\\selenium browser\\New folder\\chromedriver.exe");
driver=new ChromeDriver();
driver.get("https://app.crossover.com/x/marketplace/available-jobs");
driver.manage().window().maximize();
driver.findElement(By.cssSelector(".btn.btn-default.form-control.ui-select-toggle")).click();
WebElement dropdonw_ele = driver.findElement(By.xpath("/html/body/div[2]/div[3]/div/div/div/div[2]/form/div/div[2]/job-label-select/div/ul/li/div[5]/span/div/span"));
Actions act = new Actions(driver);
act.build();
act.moveToElement(dropdonw_ele).click();
act.perform();
}
}
答案 0 :(得分:0)
如果您的下拉列表是本机html下拉列表,请查看org.openqa.selenium.support.ui.Select类。
//simplify this xpath expression?
WebElement dropdonw_ele = driver.findElement(By.xpath("/html/body/div[2]/div[3]/div/div/div/div[2]/form/div/div[2]/job-label-select/div/ul/li/div[5]/span/div/span"));
Select dropDown = new Select(dropdonw_ele);
dropDown.selectByValue("your item value");
如果它不是本机html标记,您可以使用操作,也可以直接单击值框而不使用操作。如果这不起作用,因为下拉值元素不可见,您可以使用JavaScript单击它。
private void clickWithJavaScript(WebElement target) {
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click()", target);
}
答案 1 :(得分:0)
嗨Rocky您可能不需要使用动作类。 以下是您可以尝试的可行代码,并告诉我们。
public class test
{
static WebDriver driver;
public static void main(String[] args)
{
System.setProperty("webdriver.chrome.driver", "D:\\rakesh\\software\\selenium browser\\New folder\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://app.crossover.com/x/marketplace/available-jobs");
Thread.sleep(3000L);
driver.findElement(By.xpath(".//*[@ng-click='$select.toggle($event)']")).click();
Thread.sleep(3000L);
driver.findElement(By.xpath(".//*[contains(text(),'iOS and Android')]")).click();
Thread.sleep(3000L);
}
}
请尝试一下。 快乐学习: - )
答案 2 :(得分:0)
试试这种方式。
注意:使用Relative xpath
,而不是absolute xpath
。
driver.get("https://app.crossover.com/x/marketplace/available-jobs");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.findElement(By.xpath("//span[@class='ui-select-match-text pull-left']/span")).click(); //click on All job categories first
Thread.sleep(3500);
driver.findElement(By.xpath("//div[@class='ng-scope']/span[contains(text(), 'C++')]")).click(); //By using xpath method click on C++ from the dropdown selection.
Thread.sleep(3500);