我正在尝试连续自动下载大量指标。到目前为止,我可以打开URL,登录,切换选项卡,然后转到所需的部分。我在点击下拉列表并选择一个值以将列表从10扩展到100时遇到问题。
到目前为止,这是我的代码
SoltraDownload.java
import java.util.Scanner;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class SoltraDownload {
public static void main(String[] args) {
//PROMPT USER FOR Password
//System.out.print("Please Enter Your Username: ");
//Scanner scanner = new Scanner(System.in);
//String username = scanner.next();
//PROMPT USER FOR Username
//System.out.print("Please Enter Your Password: ");
//String password = scanner.next();
//GET WEB DRIVER
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("EDITED FOR QUESTION");
driver.manage().window().maximize();
//GET INSTANCE OF Soltra HOME PAGE
SoltraHomePage SoltraHomePage = new SoltraHomePage(driver);
//LOGIN TO SOLTRA
SoltraHomePage.loginP("EDITED FOR QUESTION");
SoltraHomePage.loginU("EDITED FOR QUESTION");
SoltraHomePage.loginC();
//MOVE TO FEEDS PAGE
SoltraHomePage.FeedPage();
//PAGE CLICK ON FEED SELECTION
SoltraHomePage.ChooseFeed();
//SELECT DROPDOWN value 100
SoltraHomePage.Dropdown();
}
}
SoltraHomePage.java
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
public class SoltraHomePage {
@FindBy(how = How.ID, using = "username") private WebElement Username;
@FindBy(how = How.ID, using = "password") private WebElement Password;
@FindBy(how = How.ID, using = "loginbutton") private WebElement loginbutton;
@FindBy(how = How.LINK_TEXT, using = "Feeds") private WebElement Feeds;
@FindBy(how = How.ID, using = "feedlist") private WebElement feedlist;
@FindBy(how = How.CLASS_NAME, using = "container") private WebElement container;
@FindBy(how = How.LINK_TEXT, using = "Default") private WebElement Default;
@FindBy(how = How.CSS, using = "control-bar") private String control;
// Create a new instance of a driver
WebDriver driver = new HtmlUnitDriver();
public SoltraHomePage(WebDriver driver) {
PageFactory.initElements(driver, this);
}
public void loginU(String text) {
this.Username.clear();
this.Username.sendKeys(text);
}
public void loginP(String text) {
this.Password.clear();
this.Password.sendKeys(text);
}
public void loginC(){
this.loginbutton.click();
}
public void FeedPage() {
this.Feeds.click();
}
public void ChooseFeed() {
feedlist.findElement(By.partialLinkText("Default")).click();
}
public void Dropdown() {
//Code to select dropdown value
}
}
这是html代码的一个子集 - 我希望在下拉列表中选择值100
<div class="row control-bar">
<div class="col-sm-4"></div>
<div class="col-sm-4">
<ul class="pager">
<li class="previous"><input type="button" class="btn btn-default" data- bind="click: goFirst, disable: page()==1" value="<<"></li>
<li class="previous"><input type="button" class="btn btn-default" data- bind="click: goPrev, disable: page()==1" value="<"></li>
<li><small data-bind="text: page"></small> of <small data-bind="text: totalPages"></small> (<small data-bind="text: totalRows"></small>
<small data-bind="if: totalRows()!==1">rows</small><small data-bind="if: totalRows()==1">row</small>)</small></li>
<li class="next"><button class="btn btn-default" data-bind="click: goNext, disable: page() == totalPages()">></button></li>
<li class="next"><button class="btn btn-default" data-bind="click: goLast, disable: page() == totalPages()">>></button></li>
</ul>
</div>
<div class="col-sm-4">
<ul class="pager">
<li class="pull-right"><small>Indicators per page: </small>
<select data-bind="value: pageSize, event: { change: loadData }" style="width:auto">
<option value="5">5</option>
<option value="10">10</option>
<option value="20">20</option>
<option value="50">50</option>
**<option value="100">100</option>** //This is the value I am looking to choose
</select>
</li>
</ul>
答案 0 :(得分:3)
我总是创建一个自定义动作类并将它们放在那里:
public static void selectByValue(WebElement element, String value) {
Select selectElement = new Select(element);
selectElement.selectByValue(value);
}
public static void selectByText(WebElement element, String text) {
Select selectElement = new Select(element);
selectElement.selectByVisibleText(text);
}
这些将获取WebElement,将其转换为Select元素(org.openqa.selenium.support.ui.Select),并使用Select方法选择您的选项。这仅适用于html选择元素。你可以像这样使用它:
在顶部:
@FindBy(how = How.CSS, using = "li.pull-right select") private WebElement soltraSelect;
在测试中:
CustomActions.selectByValue(soltraSelect, "100");
答案 1 :(得分:2)
您可以使用Select对象或定义正确的XPath:
1)使用选择:
Select element = new Select(webelement);
element.selectByValue(value);
2)使用XPath:
By option = By.xpath("//select[@class = 'expression']/option[@value = 'value']");
driver.findElement(option).click();
答案 2 :(得分:1)
由于value属性与文本具有相同的值,我建议使用以下cssSelector以获得更好的搜索结果
String val = "100";
By css = By.cssSelector("select>option[value='" + val + "']");
driver.findElement(css).click();
另一方面,您可以使用selectByValue
方法来完成相同的事情而不是视觉文本。请参阅doc