2017-02-27 147 views
1

我想從下拉菜單中選擇一個項目,因爲html標籤沒有用作選擇下拉菜單,然後我通過Action選擇了下拉菜單項。
無法從硒webdriver下拉菜單中選擇項目

我的問題是這種標準的方式來代碼來選擇這種情況下拉項目或應該我需要改變我的代碼。

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

任何反應? @rocky –

回答

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); 
+0

你用我的代碼試過了嗎? –

+0

好的,謝謝@jainish其實我正面臨着相對XPath的問題,因爲頁面上的一些元素動態變化。 – rocky

+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); 
} 
0

嗨,洛基你可能不需要使用操作類。 以下是您可以嘗試的可行代碼,並讓我知道。

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); 
    } 
} 

請在您的最後嘗試。 快樂學習:-)

相關問題