我在Ubuntu Mate 16.04上使用Selenium 3和Firefox 48。我想从下拉框中自动选择一个项目,但它总是失败。
这是我的方法:
package mypackage;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
public class Main {
public static void main(String[] args) {
(new Main()).doit();
}
void doit() {
String geckoPath = "/opt/geckodriver"; // System dependent
String baseUrl = "https://developer.mozilla.org/en/docs/Web/HTML/Element/select";
System.setProperty("webdriver.gecko.driver", geckoPath);
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().pageLoadTimeout(120, TimeUnit.SECONDS);
driver.get(baseUrl);
// convinience click to scroll near dropdown box
driver.findElement(By.id("Result")).click();
WebElement elem = driver.findElement(By.name("select"));
//elem.click(); // verify we have the right element
Select dropdown = new Select(elem);
System.out.println("Selected option (before): " + dropdown.getFirstSelectedOption().getText());
synchronized (this) {
try {
wait(2000); // redundant; just to be safe we are not too fast
} catch (Exception e) {}
}
//dropdown.selectByVisibleText("Value 3");
dropdown.selectByValue("value3");
System.out.println("Selected option (after): " + dropdown.getFirstSelectedOption().getText());
return;
}
}
该元素被正确识别,可以通过取消注释//elem.click()
行来确定。但是,选择永远不会发生。我尝试使用哪种功能无关紧要selectByVisibleText("Value 3")
或selectByValue("value3")
。
它可能是Selenium框架中的一个错误,因为它仍处于测试阶段,但我不确定。如果它实际上是一个错误,那么如果有人可以共享Selenium 2二进制文件的链接,我将不胜感激。我尝试从Github下载Selenium 2但是构建失败了。它的文档也很差,所以我不确定在编译后如何处理二进制文件。 Selenium 3框架有一些我在Selenium 2中没有看到的第三方二进制文件。不确定我是否必须将它们下载到其他地方或者只是不需要它们。
PS:如果你想尝试上面的例子,那么你将不得不改变你的gecko-driver的路径。